Docker的安装非常的简单和快捷,当前Docker已支持大多数Linux发行版,包括:Ubuntu、Red Hat、CentOS、SUSE、Fedora、Debian等,也可以在AWS、Aliyun等云平台安装。Docker基于LXC实现容器相关功能,要在Mac OS X或Windows中运行Docker就需要借助Docker Toolbox等工具模拟一个Docker虚拟环境。
1. Docker安装条件
通过上一篇对Docker介绍,我可以了解到Docker对运行环境有一些要求,具体如下:
- 64位CPU,当前只支持
amd64、x86_64 3.0+版本的Linux内核,虽然一些老版本(如:2.6.x或其后)的版本的内核也能运行,便会有各种问题,不建议使用- Linux内核必须支持
cgroup和namespace - Linux内核必须支持以下存储驱动之一:
Device Mapper(默认)Device ManagerAUFSvfsbtrfs
自2017年3月起,Docker发行版分成了CE(Community Edition)和EE版(Enterprise Edition),在本文示例中,我们使用CE版本的。
2. CentOS安装Docker
2.1 环境检查
系统需求
官方提供支持的CentOS系统当前只有64位的CentOS 7发行版。当然这不并意味你不能CentOS 6等其它CentOS中使用,理论上讲只要满足Docker安装条件,都可以安装Docker,只是你可能需要自己进行更新。
移除非官方Docker包
一些yum源中包含了一个版本较旧的Docker包,其包名是docker而不是官方的docker-engine。我们需要先移除它:
$ sudo yum -y remove docker\
docker-common \
container-selinux \
docker-selinux \
docker-engine
2.2 yum源安装Docker
使用yum源安装Docker,首先要设置yum,设置后就可以基于源进行安装、更新、降级等操作。
1. 安装yum-utils工具
安装yum-utils,它提供了yum-config-manager工具:
$ sudo yum install -y yum-utils
2. 设置yum源
以下命令会设置一个稳定版(stable)的源:
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
在以上示例中,我们添加了就添加了一个CE版本的yum源。
注意:非稳定版(testing)的Docker源默认未启用,可以通过以下命令启用:
$ sudo yum-config-manager --enable docker-ce-edge
关闭非稳定版(testing)的源使用以下命令:
$ sudo yum-config-manager --disable docker-ce-edge
3. 更新yum包索引
$ sudo yum makecache fast
4. 安装Docker
最新版安装
使用以下命令,可以安装最新版本的Docker:
$ sudo yum -y install docker-ce
指定版本安装
在生产环境中,我们会安装指定版本的Docker而不总是安装最新版。可以通过以下命令查看可用的安装版本:
$ yum list docker-ce.x86_64 --showduplicates |sort -r
在安装时可以指定版本号来安装指定版本的Docker:
$ sudo yum -y install docker-ce-<VERSION_STRING>
5. 验证安装
可以通过hello-world镜像来验证Docker安装是否成功:
$ sudo docker run hello-world
如果验证成功,则会看到类似如下输出:
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 78445dd45222: Pull complete Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ……
如果输出如下,则说明docker服务还未运行,需要启动docker服务:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'.
启动docker服务:
$ sudo service docker start
6. 升级安装
使用yum源安装的Docker升级非常简单,使用以下命令即可完成Docker的升级更新:
$ sudo yum makecache fast
2.3 rpm包安装Docker
除了使用Docker源安装外,还可以下载适用于你的系统版本.rpm文件来安装
1. 下载.rpm文件
Docker官方提供了CentOS 6/7两个发行版的.rpm二进制安装文件及src源安装文件,可以通过以下网址查找并下载适用的安装包:
https://yum.dockerproject.org/repo/main/centos/
2. .rpm安装Docker
下载.rpm文件后,使用yum命令进行安装。安装时注意将.rpm文件路径修改为实际路径:
$ sudo yum -y install /path/to/package.rpm
3. 验证安装
同样使用hello-world镜像来验证Docker安装是否成功:
$ sudo docker run hello-world
4. Docker升级
使用.rpm包安装的Docker不支持在线升级,升级时同样需要下载新的安装文件并使用yum -y upgrade命令进行升级安装:
$ sudo yum -y upgrade /path/to/package.rpm
关于yum及rpm的一些参考:
2.4 Docker的卸载
卸载Docker时,除了要卸载Docker程序外,还要手工删除使用过程中产生的镜像、容器、卷及自定义配置文件中。
1. 卸载Docker程序包
$ sudo yum -y remove docker-ce
2. 删除Docker镜像等
$ sudo rm -rf /var/lib/docker
3. Ubuntu安装Docker
本文使用Ubuntu 16.04.1 LTS系统演示安装Docker。目前Docker官方提供支持的Ubuntu版本有:
- Yakkety 16.10(64位)
- Ubuntu Xenial 16.04 (LTS)(64位)
- Ubuntu Trusty 14.04 (LTS)(64位)
其它64位版本的Ubuntu版本(如:14.10、15.04)也并不是不能安装Docker,只要有APT源就可以安装,只是Docker官不会或以后不会再维护APT源更新,因此建议使用官方推荐版本的系统。
3.1 环境检查
Docker依赖64位操作系统及3.10及以上版本的内核,使用uname命令检查当前环境是否满足:
$ uname -a Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
3.2 安装准备
更新apt源、安装依赖包
更新apt包索引:
$ sudo apt-get update
sudo apt-get install curl \
linux-image-extra-$(uname -r) \
linux-image-extra-virtual
注意:apt源更新需要root权限,此外Docker相关操作大多都需要root权限,不再特别说明。
在Ubuntu中安装Docker,有以下几种安装方式:
- 使用
apt源安装 - 使用
DEB包安装 - 在
14.04+版本中,已经自带了docker.io,也可使用sudo apt-get install -y docker.io命令直接安装
3.3 apt源安装Docker
1. https支持
Docker安装需要支持https,确保已安装https及CA支持:
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
2. 添加Docker官方GPG密钥
添加Docker仓库的GPG密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
验证的Key输出是9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88,验证结果如下:
$ sudo apt-key fingerprint 0EBFCD88
pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb)
sub 4096R/F273FCD8 2017-02-22
3. 添加Docker源
使用以下命令,添加Docker的最新稳定源:
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
添加后,更新apt:
$ sudo apt-get update
4. 安装Docker
最新版安装
可以使用以下命令,安装最新版本的Docker:
$ sudo apt-get install docker-ce
指定版本安装
或使用以下命令,查看所有可用的安装版本:
$ apt-cache madison docker-ce docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
如果需要安装指定版本的Docker,在安装时指定版本号即可:
$ sudo apt-get -y install docker-ce=<VERSION_STRING>
5. 验证安装
可以通过hello-world镜像来验证Docker安装是否成功:
$ sudo docker run hello-world
以上命令会下载并在一个容器中运行测试镜像,该容器运行后会输出一些日志信息,类似如下:
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: ……
6. 升级安装
对于使用apt源安装的Docker,我们可以使用以下命令对Docker升级更新:
$ sudo apt-get update
3.4 deb包安装Docker
Docker还支持使用.deb文件安装,使用.deb安装后,以后每次更新都需要下载一个新文件来更新已安装的Docker。
1. 下载.deb文件
通过以下网址,查找并下载一个所需安装版本的Docker:
https://apt.dockerproject.org/repo/pool/main/d/docker-engine/
2. 使用.deb文件安装Docker
使用以下命令安装Docker,注意将路径修改为你所下载的.deb文件的路径:
$ sudo dpkg -i /path/to/package.deb
3. 验证安装
使用hello-world镜像来验证Docker安装是否成功:
$ sudo docker run hello-world
3.5 Docker的卸载
1. 卸载Docker安装包
$ sudo apt-get purge docker-ce
2. 卸载Docker镜像等
在Docker的使用过程中,会存在镜像、容器、卷及自定义配置文件中。这些文件我们需要手工移除:
$ sudo rm -rf /var/lib/docker
4. Mac OS X安装Docker
Docker依赖于LXC,这并不是说其不能用于Mac OS X系统中
4.1 工具的选择
要在MAC中使用Docker,官方提供了Docker for Mac及Docker Toolbox两种工具软件。简单介绍如下:
Docker Toolbox依赖VirtualBox实现运行环境的模拟,Docker Toolbox安装后会在Mac的/usr/local/bin目录下安装:docker、docker-compose和docker-machine三个软件,当然还会安装VirtualBox。Docker Engine就运行在VirtualBox之上。
Docker for Mac是一个Mac原生应用,会被安装到/Applications目录下。安装时会在/usr/local/bin目录下创建docker和docker-compose的软件连接,该连接会绑定到/Applications/Docker.app/Contents/Resources/bin.目录下的Mac应用。
Docker for Mac不需要VirtualBox,但依赖HyperKit,一个轻量的构建于Hypervisor.framework的MacOS虚拟化解决方案。Docker for Mac仅适用于2010年之后的机型,MacOS 10.10.3 Yosemite及以上版本的系统。
在本文,我们将使用Docker for Mac来构建Docker环境。
4.2 下载Docker for Mac
可以通过以下连接下载最新稳定版的Docker for Mac:
4.3 安装运行Docker for Mac
1. 双击安装包Docker.dmg,将Docker.app程序拖拽到Applications文件夹下,完成安装。

安装时可能会要求你输入系统密码,按要求输入系统使安装程序获取相关权限。
2. 安装完成后,在LaunchPad中双击Docker图标启动Docker。
Docker运行后,会在顶部的状态栏显示[
]图标,通过这个图标可以查看Docker状态或进行其它操作。Docker处于运行状态时,可以在控制台中访问。如,查看Docker信息:
$ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.13.0 ……
Docker安装后首次启动时,会显示以下界面,可以单击[
]图标将其关闭。

5. Docker的简单使用
到此为止,我们已经掌握了在CentOS、Ubuntu等Linux环境或Mac环境下安装Docker。完成安装后,来简单使用一下Docker。
示例一:版本查看
在控制台查看docker、docker-compose和docker-machine的版本信息:
$ docker --version Docker version 1.13.0, build 49bf474 $ docker-compose --version docker-compose version 1.10.0, build 4bd6f1a $ docker-machine --version docker-machine version 0.9.0, build 15fd4c7
示例二:Docker容器管理
1. 启动一个容器
用Docker启动一个nginxWeb服务器:
$ docker run -d -p 80:80 --name webserver nginx
如果本地没有找到镜像,会自动从Docker Hub下载,启动完成后,在浏览器输入http://localhost/查看运行效果。

2. 容器信息查看
使用docker ps查看所有正在运行的容器:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c3830eb3e36c nginx "nginx -g 'daemon ..." 24 minutes ago Up 24 minutes 0.0.0.0:80->80/tcp, 443/tcp webserver
通过docker ps命令,我们可以查看容器的相关信息,如:容器Id、镜像名、运行状态、绑定端口等。当前系统中有一个nginxWeb服务器正在运行,所以只有一行记录。
要查看系统中的所有容器,需要添加-a参数:
$ docker ps -a
3. 容器的停止与启动
nginxWeb服务器会在持续运行在你绑定的端口上,直到你停止或移除容器。
停止容器,可以全使用以下命令:
$ docker stop webserver
停止后,查看运行状态:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
再次启动容器:
$ docker start webserver
4. 容器的移除与恢复
停止并移除容器:
$ docker rm -f webserver
docker rm会移除容器,但会保留镜像。可以使用docker images命令查看所有本地镜像:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest a39777a1a4a6 6 days ago 182 MB
我们可能有会需要保留镜像,这样下次创建容器时就不需要再从Docker Hub拉取镜像。比如,再次启动nginxWeb服务器:
$ docker run -d -p 80:80 --name webserver nginx eae491311de68246fc89adad2895f176296a82b5d7c9176739a67e0103813847
5. 移除镜像
当镜像不再需要时,我们可以将镜像移除。移除镜像使用rmi命令:
$ docker rmi nginx
