Docker 是一个流行的用 Go 语言开发的开源项目,基于Linux内核的cgroup、namespace及 AUFS 等技术,对进程进行封装隔离,由 Dotcloud 公司开发。Docker已成为容器行业的事实标准。
小陈发现一个有趣的事情,容器的英文是Container,有集装箱的意思。而Docker的中文翻译是码头工人的意思。那么,码头工人不就是搬运集装箱的吗?此外,Docker的Logo是一堆集装箱放在鲸鱼上,作为鲸鱼的docker,就是一个标准化的运输系统。
Docker核心概念
Docker 有三大核心概念,分别是容器(Container)、镜像(Image)和仓库(Repository)。
- 镜像:类似虚拟机的镜像,通俗的理解就是安装文件,相当于是容器的模板,可以根据不同的镜像来创建不同的容器。镜像和容器的关系可以理解为面向对象中类和实例对象的关系。
- 容器:类似一个轻量级的沙箱,容器是根据镜像创建的应用运行实例,具体运行应用程序的一个进程,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
- 仓库:类似代码仓库,是 Docker 集中存放镜像文件的场所。仓库有本地镜像仓库 Docker-Registry 和公共镜像仓库 Docker Hub,平时使用本地仓库的镜像,没有的话可以去公共镜像仓库下载。
可以用编程中面向对象的概念来做类比:镜像可以看成一个类,容器可以看做是类的实例化对象。一个类可以有多个对象。同理,一个镜像可以有多个容器。容器是由镜像实例化而来。简单来说,镜像是文件,容器是进程,仓库是保存镜像的地方。
Build, Ship and Run Any App, Anywhere
Docker的主要目标是build、ship and run any app,anywhere,即通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的一次封装、到处运行,即在任何平台都可以构建、运输、运行任何应用。
Docker的build、ship和run的含义如下:
- Build(构建镜像):镜像就像是集装箱,包括文件以及运行环境等资源。
- Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
- Run (运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。
Docker的使用方式
Docker 在主流的操作系统和云平台上都可以使用,包括 Linux (如 ubuntu、Debian、CentOS、Redhat 等)、MacOS 和 Windows 操作系统,以及 阿里云 等云平台(Aliyun.com)。
推荐尽量使用 Linux 操作系统来运行 Docker,因为目前 Linux 操作系统对 Docker的支持是原生的,使用体验最好。
我们可以在阿里云云服务器ECS上,很便捷的部署配置一个Docker开发环境,以快速体验Docker容器的使用。Docker的安装比较简单,主要步骤如下(具体步骤将会在实验环节进行实践):
- 在阿里云(Aliyun.com)开通一台云服务器ECS
- 在ECS上安装必要的系统工具
- 添加镜像软件源信息
- 加入镜像源地址
- 安装并更新Docker-CE
- 查看Docker的版本,确认安装成功。若能正常显示版本信息,则安装成功
- 启动Docker服务
- 设置Docker为开机自启动
Docker基础命令
以下是Docker的一些常用命令,可以帮助初学者快速熟悉和使用Docker。
命令 | 指令说明 |
docker ps | 检查容器正在运行列表 |
docker inspect [容器id] | 查看容器参数 |
docker run | 容器运行 |
docker rm | 删除容器 |
docker exec -it [容器id] /bin/bash | 在运行的容器中运行额外的进程 |
docker cp 文件名[容器id]:/home/admin | 拷贝文件到容器内 |
docker images | 查看本机已有镜像 |
docker create | 创建一个尚未启动的容器,start 启动创建了的容器 |
docker wait | 阻塞对容器的其他调用方法,直到容器停止后退出 |
docker stop | 停止一个运行中的容器 |
docker start | 启动一个或多个已经被停止的容器 |
docker top | 显示主机为每个容器中的进程所分配的PID |
docker diff | 查看安装容器镜像时的改动,返回文件改动列表 |
docker inspect | 显示docker为该容器保留的所有元数据(一个json文件) |
docker commit | 向镜像提交一个新的文件记录 |
通过Docker命令,运行一个容器一般情况下只需要三步:
- pull:从镜像仓库中将相应的镜像下载下来;
- list:当镜像下载完成之后就可以通过docker images 来查看本地镜像,会列出一个完整的镜像列表,可以在列表中选中想要的镜像;
- run:当选中镜像之后,就可以通过 docker run 来运行这个镜像,得到想要的容器。当然可以通过多次运行得到多个容器。
- 通过docker指令运行容器