2、安装Docker

[TOC]

总览

Docker的安装既快又简单。目前, Docker已经支持非常多的 Linux平台,包括 Ubuntu 和RHEL( Red Hat Enterprise Linux, Red Hat企业版 Linux)。除此之外, Docker还支持 Debian、Centos、 Fedora、 Oracle Linux等衍生系统和相关的发行版。如果使用虚拟环境,甚至也可以在OSX和 Microsoft Windows中运行 Docker。下面的安装介绍主要包括:

  • 在运行 Ubuntu系统的宿主机中安装 Docker
  • 在运行RHEL或其衍生的 Linux发行版的宿主机中安装 Docker
  • 在OSX系统中用Boot2Docker工具安装 Docker:
  • 在 Microsoft Windows系统中使用Boot2Docker工具安装 Docker

Boot2Docker是一个极小的虚拟机,同时提供了一个包装脚本( wrapper scnpt)对该虚拟机进行管理。该虚拟机运行一个守护进程,并在OSX或 Microsoft Windows中提供一个本地的 Docker守护进程。 Docker的客户端工具 docker可以作为这些平台的原生程序安装,并连接到在Boo2 Docker虚拟机中运行的 Docker守护进程。

安装 docker 的先决条件

和安装其他软件一样,安装 Docker也需要一些基本的前提条件。 Docker要求的条件具体如下。

  • 运行64位CPU构架的计算机(目前只能是x8664和amd64),请注意, Docker日前不支持32位CPU。

  • 运行 Linux3.8或更高版本内核。一些老版本的2.6.x或其后的内核也能够运行 Docker, 但运行结果会有很大的不同。而且,如果你需要就老版本内核寻求帮助时,通常大家会建议你升级到更高版本的内核。

  • 内核必须支持一种适合的存储驱动( storage driver), 例如:

    • DeviceManager
    • AUFS
    • vfs
    • btrfs

    默认存储驱动通常是 Device Mapper。

  • 内核必须支持并开启 cgroup和命名空间(namespace)功能。

在 Ubuntu 中安装 Docker

1.检查前提条件

1.1 内核

首先,确认已经安装了能满足要求的 Linux内核。可以通过 uname命令来检查内核版本信息

$ uname -a
Linux darknight.example.com 3.8.0-23-generic #34-precisel-ubuntu SMP Wed May 29 21:12:31 UTC 2013 x86_64 X86_64 x86_64 GNU/ Linux

可以看到,这里安装的是3.8.0x86_64版本的内核。这是 Ubuntu12.04.3及更高版本(包括 Ubuntu13.04 Raring)默认的内核但是,如果我们使用 Ubuntu12.04 Precise较早的发行版,可能是3.2内核。我们也可以轻松地把 Ubuntu2.04升级到最新的内核。例如,本书写作时,3.8版本的内核已经可以用apt-get来安装了:

$ sudo apt-get update
$ sudo apt-get install linux-headers-3.8.0-27-generic
linux-image-3.8.0-27-generic linux-headers-3.8.0-27

然后,我们就可以更新 Grub 启动加载器来加载新内核:

sudo update-grub

完成安装后,需要重启宿主机来启动新的3.8内核:

sudo reboot

重启之后,我们可以再次使用uanme -a来确定已经运行了正确版本的内核。

1.2 检查Device Mapper

这里我们将使用 Device Mapper作为存储驱动。自2.6.9版本的 Linux内核开始已经集成了 Device Mapper,并且提供了一个将块设备映射到高级虚拟设备的方法。 Device Mapper支持“自动精简配置”(thin-provisioning)的概念,可以在一种文件系统中存储多台虚拟设备( Docker镜像中的层)。因此,用 Device Mapper作为 Docker 的存储驱动是再合适不过了。
任何 Ubuntu12.04或更高版本的宿主机应该都已经安装了 Device Mapper,可以通过以下代码来确认是否已经安装:

$ ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 Oct 5 18:50 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper

也可以在/proc/devices文件中检査是否有 device-mapper条目

$ sudo grep device-mapper /proc/devices

如果没有出现 device-mapper 的相关信息,我们也可以尝试加载 dm_mode 模块:

$ sudo modprobe dm_mod

cgroup和命名空间自2.6版本开始己经集成在Linux内核中了。2.6.38以后的内核对cgroup和命名空间都提供了良好的支持,基本上也没有什么bug。

2.安装 Docker

现在“万事俱备,只欠东风”。我们将使用 Docker团队提供的DEB软件包来安装 Docker 首先,要添加 Docker的APT仓库。

$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"

其间,可能会提示我们确认添加仓库并自动将仓库的GPG添加到宿主机中。
安装之前,我们首先需要确认已经安装了 curl 命令

whereis curl
curl: /usr/bin/curl /usr/bin/X11/curl /usr/share/man/man1/curl.1.gz

如果没有找到 curl 命令,我们需要先安装它

$ sudo apt-get -y install curl

接下来,要添加 Docker 仓库的 GPG 密钥

$ curl -s https://get.docker.io/gpg | sudo apt-key add -

之后,我们需要更新 APT 源

$ sudo apt-get update

现在,我们就可以安装 Docker 软件包了

$ sudo apt-get install lxc-docker

执行该命令后,系统会安装 Docker 软件包以及一些必需的软件包。
安装完毕,可以使用 docker info 命令来确认 Docker 是否已经正常安装并运行了。

3.Docker 与 UFW

在 Ubuntu 中,如果使用 UFW,即 Uncomplicated Firewall,那么还需要对其做一点儿改动才能让 Docker工作。 Docker使用一个网桥来管理容器中的网络。默认情况下,UFW会丢弃所有转发的数据包(也称分组)。因此,需要在UFW中启用数据包的转发,这样オ能让Docker正常运行。我们只需要对/etc/ default/ufw文件做一些改动即可。我们需要将这个文件中以下代码

DEFAULT_FORWARD_POLICY="DROP"

替换为

DEFAULT_FORWARD_POLICY="ACCEPT"

保存修改内容并重新加载 UFW 即可:

$ sudo ufw reload

在 Red Hat 和 Red Hat 系发行版中安装 Docker

在 Red Hat 企业版 Linux(或者 CentOs 或Fedora)中,只有少数几个版本可以安装 Docker,包括:

  • RHEL(和 CentOS)6或以上的版本(64位)
  • Fedora Core19或者以上的版本(64位)
  • Oracle Linux 6 和 Oracle Linux 7,带有 Unbreakable 企业内核发行版3(3.8.13)或者更高版本(64位)

在 Red Hat企业版 Linux7及更高版本中, Docker已经成为系统自带的软件包了,并且, 只有 Red Hat企业版 Linux7是 Red Hat官方支持 Docker的发行版本。

1.检查前提条件

1.1 内核

使用uname命令来确认是否安装了3.8后者更高的内核版本

1.2 检查 Device Mapper

我们这里使用 Device Mapper 作为 Docker 的存储驱动,在 RedHat 企业版 Linux、CentOS6或Fedora Core 19及更高版本宿主机中,应该也都安装了 DeviceMapper,不过还是需要确认以下:

$ ls 0l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 Oct 5 18:50 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper

同样,也可以在/proc/devices文件中检查是否有 device-mapper 条目:

$ sudo grep device-mapper /proc/devices

如果没有检测到 Device Mapper,我们可以试着安装 Device-mapper 软件包:

$ sudo yum install -y device-mapper

安装完成后,还需要加载 dm_mod内核模块:

$ sudo modprobe dm_mod

模块加载完毕,我们就应该可以找到/sys/class/misc/device-mapper 条目了。

2.安装 Docker

在不同版本的 RedHat 中,安装过程略有不同。在 RHEL6或者 CentOS6中,需要先添加 EPEL 软件包的仓库。而 Fedora中则不需要启用EPEL仓库。在不同的平台和版本中,软件包命名也有细微的差别。

2.1 在RHEL6和 CentOS6中安装 Docker

对于 RedHat 企业版 Linux6和 CentOS6,可以使用以下指令的 RPM软件包来安装 EPEL:

sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

安装完 EPEL 后,就可以安装 Docker 了

sudo yum -y install docker-io

2.2 在 RHEL7 中安装Docker

2.3 在 Fedora 中安装Docker

在不同版本的 Fedora 中,软件包的名称有所不同。在 Fedora 19中,要安装 docker-io 这个软件包:

$ sudo yum -y install docker-ioo

在 Fedora20或更高的版本中,软件包的名称已经改为 docker:

$ sudo yum -y install docker

3.在 Red Hat 系发行版中启动 Docker 守护进程

软件包安装完成后就可以启动 Docker 守护进程了。在 RHEL6或CentOS6中:

$ sudo service docker start

想要在系统开机时自动启动 Docker服务

$ sudo service docker enable

在RHEL7或Fedora中启动 Docker 服务

$ sudo systemctl start docker

想要在系统开机自动启动 Docker 服务:

$ sudo systemctl enable docker

完成上述工作之后,就可以用 docker info命令来确认 Docker 是否已经正确安装并运行了:

$ sudo docker info
Containers: 0
Image: 0
...

在 OS X 中安装 Boot2Docker

如果使用的是OSX系统,则可以使用 Boot2Docker工具快速上手 Docker, Boot2Docker 是一个极小的虚拟机,Boot2Docker在OSX宿主机上安装了一个原生的命令行工具,并提供了一个 Docker环境。
要在 OS X中安装Boot2,也依赖于两个必要的条件:

  • VirtualBox
  • Docker 客户端

1 安装

下载最新的 Boot2Docker:

$ wget https://github.com/boot2docker/osx-installer/release/download/v1.3.0/Boot2Docker-1.3.0.pkg

aeadebfeeb9f48a7c7d496d936ae0b41
如上图进行安装

2 启动

安装完之后单击Boot2Docker 图标来初始化并启动 Boot2Docker 虚拟机:
29842b7f4a5d0806d4fdf498050b4f06

3 测试

使用本机的Docker 客户端连接到 Boot2Docker 虚拟机中运行的 Docker 守护进程:

$ Docker info
Containers: 0
Image: 0
Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Dirs: 0
...
Kernel Version:3.13.3-tinycore64

4 注意

当需要通过网络接口或网络端口连接到某个容器,通常这个地址是 Docker 服务器的 localhost或IP地址。因为Boo2Docker是一个本地的虚拟机,拥有自己的网络接口和IP地址,因此,我们需要连接的是Boo2 Docker的地址,而不是1oca1host或宿主机的IP地址。要想得到Boot2Docker的IP地址,可以查看 DOCKER_HOST环境变量的值。当启动或安装Boot2Docker的时候, 也会弹出信息提示这个变量。
此外,你也可以运行 boot2docker ip 命令来查看 Boot2Docker 的 IP 地址:boot2docker ip,获得了 Boot2Docker 的 IP 地址后,就可以连接 localhost 上的容器了。例如,使用 curl 命令时,只需将 localhost 替换成相应的 IP 地址即可。

在 Windows 中安装 Boot2Docker

如果使用的是 Microsoft Windows系统,也可以使用Boot2Docker工具快速上手 Docker。Boot2Docker是一个极小的虚拟机,Boot2Docker在 Windows宿主机上安装了一个原生的命令行工具,并提供了一个 Docker环境。
要在 WIndows 中安装 Boot2Docker,也依赖于两个必要的条件:

  • VirtualBox
  • Docker 客户端

1 在 Windows 中安装 Boot2Docker

和 osx 一样在 github 上下载相应的安装程序并安装

$ wget https://github.com/boot2docker/windows-installer/releases/download/v1.3.0/docker-install.exe

7666e83c71afd9d0faa6f178105c3321

2 启动

点击图标启动
b4cb01ecefe9a6376b4b6aa0f0727388

3 测试

同 osx,略

脚本安装

我们还有另外一种方法,就是使用远程安装脚本在相应的宿主机上安装 Docker。我们可以从 get.docker.io 网站获取这个安装脚本。

  1. 确认 curl 命令
$ whereis curl
curl: /usr/bin/curl /usr/bin/X11/curl /usr/share/man/man1/curl.1.gz
  1. 如有需要,安装 curl
    Ubuntu
$ sudo apt-get -y install curl

Fedora

$ sudo yum -y install curl
  1. 下载安装脚本并安装 Docker
$ curl https://get.docker.io/ | sudo sh

这个脚本会自动安装 Docker 所需的依赖,并且检查当前系统的内核版本是否满足要求,以及是否支持所需的存储驱动,最后会安装 Docker 并启动 Docker 守护进程。

二进制安装

如果不想用基于软件包的安装方法,我们也可以下载最新的 Docker 可执行程序:

$ wget http://get.docker.io/builds/Linux/x86_64/docker-latest.git

Docker 守护进程

安装完 Docker后,我们需要确认 Docker的守护进程是否运行。 Docker以root权限运行它的守护进程,来处理普通用户无法完成的操作(如挂载文件系统)。 docker程序是Docker守护进程的客户端程序,同样也需要以root身份运行。
当 Docker软件包安装完毕后,默认会立即启动 Docker守护进程。守护进程监听/var/run/docker.sock这个Unix套接字文件,来获取来自客户端的 Docker请求。如果系统中存在名为 docker的用户组的话, Docker则会将该套接字文件的所有者设置为该用户组。这样, docker用户组的所有用户都可以直接运行 Docker,而无需再使用sudo 命令了。

配置 Docker 守护进程

以下命令都可以启动 Docker 守护进程

$ systemctl start docker
$ dockerd

但是都是默认绑定到/var/run/docker.sock套接字,即网络接口是默认固定的。通过以下命令可以指定守护进程监听的网络接口

$ sudo dockerd -H tcp://0.0.0.0:2375

此时运行客户端就不能是docker info了,需要指定守护程序监听的网络接口:

$ sudo docker -H tcp://0.0.0.0:2375 info

或者通过指定环境变量DOCKER_HOST 来实现

$ export DOCKER_HOST='tcp://0.0.0.0:2375'

另外,我们还可以指定一个 Unix 套接字路径:

$ sudo dockerd -H /var/run/docker.sock

还可以绑定就那个多个网络接口

$ sudo dockerd -H tcp://0.0.0.0:2375 -H /var/run/docker.sock

在启动守护进程时,我们还可以通过在命令前指定 DEBUG=1 参数来输出更详细的信息。目前, Docker的日志输出还比较少。在使用了 Upstart的 Ubuntu系统下, Docker守护进程生成的日志输出都保存在/var/1og/upstart/docker.1og文件中

$ DEBUG=1 dockerd

要想让这些改动永久生效,需要编辑启动配置项。在Ubuntu中,我们需要编辑/etc/default/docker文件,并修改DOCKER_OPTS变量。
在 Fedora和 Red Hat发布版本中,则需要编辑/usr/1ib/systemd/system/docker.service文件,并修改其中的 Execstart配置项。

检查守护进程是否运行

升级 Docker

Docker图形用户界面

Docker安装之后,也可以用图形用户界面来进行管理。目前,有一些正在开发中的 Docker 用户界面和Web控制台,它们都处于不同的开发阶段,具体如下。

  • Shipyard: Shipyard提供了通过管理界面来管理各种Docker资源(包括容器、镜像、宿主机等)的功能。Shipyard是开源的,源代码可以在https://github.com/ehazlett/shipyard 获得。
  • DockerUI: DockerUI是一个可以与 Docker Remote API交互的Web界面。 DockerUI 是基于 Angularjs框架,采用 Javascript 编写的。
  • maDocker: maDocker是采用 NodeJS 和 Backbone 编写的一个WebUI,还处于早期开发阶段。

   转载规则


《2、安装Docker》 阿钟 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录