1:Docker简介

​Docker​​ 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。


Docker 是在 GitHub 上开发的 Moby 开源项目的一部分。


Docker 公司,位于旧金山,是整个 Moby 开源项目的维护者。Docker 公司还提供包含支持服务的商业版本的 Docker。

2:Docker安装

2.1:Windows安装Docker

在了解 Windows 版 ​​Docker​​ 之前,读者首先要知道这是由 Docker 公司提供的一个产品。这意味着它易于下载,并且有一个很灵活的安装器(installer)。


Windows 版 Docker 需要运行在一个安装了 64 位 Windows 10 操作系统的计算机上,通过启动一个独立的引擎来提供 Docker 环境。


其次,读者需要知晓 Windows 版 Docker 是一个社区版本(Community Edition,CE)的应用,并不是为生产环境设计的。


最后,读者还需要知道 Windows 版 Docker 在某些版本特性上可能是延后支持的。这是因为 Docker 公司对该产品的定位是稳定性第一,新特性其次。


以上 3 点被添加到 Windows 版 Docker 这个安装快捷简单,但并不支持生产环境部署的产品当中。


接下来我们一起了解一下如何安装 Windows 版 Docker。


在安装之前,Windows 版 Docker 的环境有以下要求。


Windows 10 Pro(专业版) / Enterprise(企业版) / Education(教育版)(1607 Anniversary Update、Build 14393 或者更新的版本)。


Windows 必须是 64 位的版本。


需要启用 Windows 操作系统中的 Hyper-V 和容器特性。


接下来的步骤会假设读者的计算机已经开启了 BIOS 设置中的硬件虚拟化支持。如果没有开启,读者需要在机器上执行下面的步骤。


首先,读者需要确认在 Windows 10 操作系统中,Hyper-V 和容器特性已安装并且开启。


1) 右键单击 Windows 开始按钮并选择“应用和功能”页面。


2) 单击“程序和功能”链接。


3) 单击“启用或关闭Windows功能”。


4) 确认Hyper-V和容器复选框已经被勾选,并单击确定按钮。


按上述步骤操作完成后,会安装并开启 Hyper-V 和容器特性,如下图所示。这时需要重启操作系统。


Docker介绍及安装详解_git

Docker介绍及安装详解_git_02


其中,容器特性只有在 summer 2016 Windows 10 Anniversary Update(build 14393)版本或更高版本上才能开启。


当读者完成 Hyper-V 和容器特性的安装并重启机器之后,就可以安装 Windows 版 Docker 了。


1) 访问 Docker 的下载(​​https://www.docker.com/products/docker-desktop​​)页面,并单击其中的 Download for Windows 按钮。


2) 单击后会跳转到 Docker 商店,需要读者使用自己的 Docker ID 进行登录。


3) 单击任意 Get Docker 下载链接。Docker for Windows 分为稳定版(Stable)和抢鲜版(Edge)。抢鲜版当中包含一些新特性,但是可能不够稳定。单击下载链接后,会将名为 Docker for Windows Installer.exe 的安装包下载到默认下载目录。


4) 找到上一步下载的安装包并运行即可。


以管理员身份运行安装向导,并按照提示一步一步完成整个安装过程。安装完成后 Docker 会作为系统服务自动启动,并且在 Windows 的通知栏看到 Docker 的大鲸鱼图标。


恭喜!到目前为止已经成功完成 Windows 版 Docker 的安装。


打开命令行或者 PowerShell 界面,并尝试执​​docker version​​命令。


Client: Version: 18.01.0-ce API version: 1.35 Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:05:55 2018 OS/Arch: windows/amd64 Experimental: false Orchestrator: swarm  Server: Engine: Version: 18.01.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:13:12 2018 OS/Arch: linux/amd64 Experimental: false


注意观察命令输出内容,其中 Server 部分中的 OS/Arch 属性展示了当前的操作系统是 linux/amd64。


这是因为在默认安装方式中,Docker daemon 是运行在 Hyper-V 虚拟机中的一个轻量级 Linux 上的。这种情况下,读者只能在 Windows 版 Docker 上运行 Linux 容器。


如果读者想要运行原生 Windows 容器(Native Windows Container),可以右击 Windows 通知栏中的 Docker 鲸鱼图标,并选择“切换到 Windows 容器”。


使用下面的命令也可以完成切换(进入 \Program Files\Docker\Docker 目录下执行)。

C:\Program Files\Docker\Docker> .\dockercli -SwitchDaemon

如果没有开启 Windows 容器特性,则会看到下图的提示。

Docker介绍及安装详解_docker_03

如果已经开启了 Windows 容器特性,则只需要花费数秒就能完成切换。一旦切换完成,在命令行中执行​​docker version​​指令的输出内容如下。


C:\> docker version Client: <Snip>  Server: Engine: Version: 18.01.0-ce API version: 1.35 (minimum version 1.24) Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:20:36 2018 OS/Arch: windows/amd64 Experimental: true


可以看到,现在 Server 版本信息变成了 windows/amd64。这意味着 Docker daemon 运行在原生 Windows 内核上,并且只能运行 Windows 容器了。


同时也可以发现,Experimental 这个属性的值为 true。这表示当前运行的 Docker 版本是实验版本。


前面提到过,Docker for Windows有两个版本:稳定版和抢鲜版。 Windows 容器是抢鲜版中的一个实验特性。


读者可以通过运行​​dockercli -Version​​命令来查看当前的 Docker 版本。


​dockercli​​ 命令在 C:\Program Files\Docker\Docker 目录下。


C:\Program Files\Docker\Docker> .\dockercli -Version  Docker for Windows Version: 18.01.0-ce-win48 (15285) Channel: edge Sha1: ee2282129dec07b8c67890bd26865c8eccdea88e OS Name: Windows 10 Pro Windows Edition: Professional Windows Build Number: 16299


下面展示了一些常用的能够正常执行的 Docker 命令。


> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE  > docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES  > docker system info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 6 Server Version: 17.12.0-ce Storage Driver: windowsfilter <Snip>


Windows 版 Docker 包括 Docker 引擎(客户端和 daemon)、Docker Compose、Docker Machine 以及 Docker Notary 命令行。


通过下列命令确认各个模块已经成功安装。


C:\> docker --version Docker version 18.01.0-ce, build 03596f5  C:\> docker-compose --version docker-compose version 1.18.0, build 8dd22a96  C:\> docker-machine --version docker-machine.exe version 0.13.0, build 9ba6da9  C:\> notary version notary Version: 0.4.3 Git commit: 9211198


2.2:Mac安装Docker

Mac 版 ​​Docker​​ 也是由 Docker 公司提供的一个产品。


咱们大可以放心使用 Docker,而无须先成为一个内核工程师,也不必通过很极客的方法将 Docker 安装到 Mac。


Mac 版 Docker 是由 Docker 公司基于社区版的 Docker 提供的一个产品。这意味着在笔记本上安装单引擎版本的 Docker 是非常简单的。


但是同时,这也意味着 Mac 版 Docker 并不是为生产环境而设计的。如果你听说过 boot2docker,那么 Mac 版 Docker 就是一个流畅、简单并且稳定版的 boot2docker。


对于 Mac 版 Docker 来说,提供基于 Mac 原生操作系统中 Darwin 内核的 Docker 引擎没有什么意义。


所以在 Mac 版 Docker 当中,Docker daemon 是运行在一个轻量级的 Linux VM 之上的。


Mac 版 Docker 通过对外提供 daemon 和 API 的方式与 Mac 环境实现无缝集成。


这意味着读者可以在 Mac 上打开终端并直接使用 Docker 命令。


尽管在 Mac 上实现了无缝集成,还是要谨记 Mac 版 Docker 底层是基于 Linux VM 运行的,所以说 Mac 版 Docker 只能运行基于 Linux 的 Docker 容器。


不过这样已经很好了,因为大部分容器实际上都是基于 Linux 的。


下图展示了 Mac 版 Docker 的抽象架构。

Docker介绍及安装详解_git_04

Mac 版 Docker 采用 HyperKit9 实现了一个极其轻量级的 Hypervisor。HyperKit 是基于 Xhyve Hypervisor 的。


Mac 版 Docker 也利用了 DataKit 的某些特性,并运行了一个高度优化后的 Linux 发行版 Moby(基于 Alpine Linux)。


接下来开始安装 Mac 版 Docker。


1) 打开浏览器,访问Docker的下载页面(​​https://www.docker.com/products/docker-desktop​​),然后单击 Download for Mac 按钮。


2) 页面会跳转到 Docker 商店,需要读者使用自己的 Docker ID 和密码进行登录。


3) 单击下载链接 Get Docker CE。


Mac 版 Docker 分为两个版本:稳定版(Stable)和抢鲜版(Edge)。抢鲜版包含一些新特性,但是并不保证稳定运行。


单击链接后,会下载 Docker.dmg 安装包。


4) 运行上一步中下载的 Docker.dmg 文件。将代表 Docker 的鲸鱼图标拖拽到应用文件夹(Application folder)中。


5) 打开应用文件夹(可能会自动打开)并且双击 Docker 应用图标来启动 Docker。可能需要确认是否运行,因为这是从互联网下载的应用程序。


6) 输入 Mac 用户密码,这样安装程序可以获取到创建组件所需的权限。


7) Docker daemon 进程启动。


一个活动的鲸鱼图标会在屏幕上方状态栏中出现。一旦 Docker 成功运行,鲸鱼图标就静止了。可以单击鲸鱼图标来管理 DfM。


DfM 现在已经安装完成,读者可以打开一个终端,并运行一些常用的 Docker 指令。


尝试运行下面的命令。


$ docker version Client: Version: 17.05.0-ce API version: 1.29 Go version: go1.7.5 Git commit: 89658be Built: Thu May 4 21:43:09 2017 OS/Arch: darwin/amd64  Server: Version: 17.05.0-ce API version: 1.29 (minimum version 1.12) Go version: go1.7.5 Git commit: 89658be Built: Thu May 4 21:43:09 2017 OS/Arch: linux/amd64 Experimental: true



注意,Server 的 OS/Arch 属性中显示的值是 linux/amd64。这是因为 daemon 是基于前文提到过的 Linux VM 运行的。


Client 组件是原生的 Mac 应用,运行在 Mac 操作系统 Darwin 内核之上(OS/Arch: darwin/amd64)。


除此之外,还需要注意当前 Docker 版本是一个实验性质的版本(Experimental: true)。这是因为它是抢鲜版,抢鲜版中开启了一些实验特性。


运行其他 Docker 命令。


$ docker --version Docker version 17.05.0-ce, build 89658be  $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE  $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES


Mac 版 Docker 安装了 Docker 引擎(客户端以及服务端守护程序)、Docker Compose、Docker machine 以及 Notary 命令行。


下面的 3 条命令展示了如何确认这些组件是否成功安装,以及组件的版本信息。


$ docker --version Docker version 17.05.0-ce, build 89658be  $ docker-compose --version docker-compose version 1.13.0, build 1719ceb  $ docker-machine --version docker-machine version 0.11.0, build 5b27455 $ notary version notary Version: 0.4.3 Git commit: 9211198


2.3:Linux安装Docker

在 Linux 上安装 ​​Docker​​ 是常见的安装场景,并且安装过程非常简单。


通常难点在于 Linux 不同发行版之间的轻微区别,比如 Ubuntu 和 CentOS 之间的差异。


接下来的示例基于 Ubuntu 版本 Linux,同样适用于更低或者更高的版本。


理论上,下面的示例在 CentOS 的各种版本上也是可以执行的。至于 Linux 操作系统是安装在自己的数据中心,还是第三方公有云,或是笔记本的虚拟机上,都没有任何的区别。唯一需求就是这台机器是 Linux 操作系统,并且能够访问 https://get.docker.com。


首先读者需要选择安装的 Docker 版本。当前有两个版本可供选择:社区版(Community Edition,CE)和企业版(Enterprise Edition,EE)。


Docker CE 是免费的,并且是接下来示例中将要使用的版本。


Docker EE 包含 Docker CE 中的全部功能,还包括了商业支持以及与其他 Docker 产品的集成,比如 Docker 可信镜像库和通用控制面板。


下面的例子使用wget命令来运行一个 Shell 脚本,完成 Docker CE 的安装。


更多其他在 Linux 上安装 Docker 的方式,可以打开 Docker 主页面(​​www.docker.com​​),单击页面中 Get Started 按钮来获取。


注:在开始下面的步骤之前,要确认系统升级到最新的包,并且打了相应的安全补丁。


1) 在 Linux 机器上打开一个新的 Shell。


2) 使用​​wget​​从 https://get.docker.com 获取并运行 Docker 安装脚本,然后采用 Shell 中管道(​​pipe​​)的方式来执行这个脚本。


$ wget -qO- https://get.docker.com/ | sh  modprobe: FATAL: Module aufs not found /lib/modules/4.4.0-36-generic + sh -c 'sleep 3; yum -y -q install docker-engine' <Snip> If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like:  sudo usermod -aG docker your-user  Remember that you will have to log out and back in...


3) 最好通过非 root 用户来使用 Docker。这时需要添加非 root 用户到本地 Docker Unix 组当中。


下面的命令展示了如何把名为 npoulton 的用户添加到 Docker 组中,以及如何确认操作是否执行成功。


$ sudo usermod -aG docker npoulton  $ cat /etc/group | grep docker docker:x:999:npoulton


如果当前登录用户就是要添加到 Docker 组中的用户的话,则需要重新登录,组权限设置才会生效。


至此 Docker 已经在 Linux 上安装成功。运行下面命令来确认安装结果。


$ docker --version Docker version 18.01.0-ce, build 03596f5  $ docker system info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.01.0-ce Storage Driver: overlay2 Backing Filesystem: extfs <Snip>


如果上述步骤在自己的 Linux 发行版中无法成功执行,可以访问 Docker Docs 网站(​​https://docs.docker.com​​)并单击与自己的版本相关的那个链接。


接下来页面会跳转到 Docker 官方提供的适合当前版本的安装指南页面,这个安装指南通常会保持更新。


但是需要注意,Docker 网站上提供的指令使用了包管理器,相比前面的例子需要更多的步骤才能完成安装操作。


实际上,如果读者使用浏览器打开网页 ​​https://get.docker.com​​,会发现这其实就是一个 Shell 脚本,脚本中已经帮读者定义好了安装相关的指令,包括设置 Docker 为系统开启自启动。


如果未从官方 Docker 仓库下载源码,则最终安装的可能是 Docker 的一个复制版本。过去一些 Linux 发行商选择复制了 Docker 的代码,并基于此开发了一些定制化的版本。


需要注意类似的情况,因为运行一个与 Docker 官方版本不同的复制版,可能遇到异常退出的情况。


如果本意就是采用该版本运行,那这不是问题。但是如果本意并非如此,复制版本中发行商提交的一些改动可能导致其版本无法与 Docker 官方版本相兼容。这样就无法从 Docker 公司或者 Docker 公司授权的合作伙伴那里获得商业支持。