Ubuntu
Docker支持这些Ubuntu操作系统:
- Ubuntu Xenial 16.04 (LTS)
- Ubuntu Trusty 14.04 (LTS)
- Ubuntu Precise 12.04 (LTS)
这篇文章指导你使用Docker-managed的安装包和安装技巧来安装Docker。使用这些安装包确保你安装最新的Docker。如果你希望使用Ubuntu包管理器安装Docker,查看你的Ubuntu文档。
注意: Ubuntu Utopic 14.10 and 15.04 在 Docker 的
APT
仓库但是很快将不再支持。
Prerequisites
Docker需要一个不限版本的64位Ubuntu系统。另外你的内核版本必须在3.10以上。最近的3.10版本或者新的主要版本也是支持的。
3.10以前的内核缺少Docker容器运行的一些功能。这些老的版本已知有很多致使数据丢失的bug,并且在一定的条件下频繁的崩溃。
要检查你的内核版本,打开终端使用 uname -r
命令打印你的内核版本:
$ uname -r |
注意:如果你之前使用
APT
安装过Docker, 请确保你已经更新过APT
源。
Update your apt sources
Docker的 APT
仓库包含 1.7.1 和更高的Docker版本。 设置 APT
使用安装包在新的仓库:
使用具有
sudo
orroot
权限的用户登录你的系统。打开终端窗口。
更新包信息, 确保 APT 工作在
https
模式,并且已经安装CA 证书。$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates添加新的
GPG
密钥。$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
打开文件
/etc/apt/sources.list.d/docker.list
在你喜爱的编辑器。如果没有这个文件就创建它。
清除所有内容。
添加一些内容为你的Ubuntu 操作系统。
可能的内容如下:
On Ubuntu Precise 12.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-precise main
On Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty main
Ubuntu Xenial 16.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-xenial main
注意: Docker 并没有提供安装包给所有的架构。 你可以每天在https://master.dockerproject.org查看最新的二进制包。 在多架构系统上安装Docker,,需要添加
[arch=...]
节点。 点击 Debian Multiarch wiki 获取更多细节。
保存并关闭
/etc/apt/sources.list.d/docker.list
文件。更新
APT
包索引。$ sudo apt-get update
清除旧的仓库。
$ sudo apt-get purge lxc-docker
验证
APT
是否从正确的仓库拉取。$ apt-cache policy docker-engine
从现在开始当你运行
apt-get upgrade
,APT
从新的仓库拉取。
Prerequisites by Ubuntu Version
- Ubuntu Xenial 16.04 (LTS)
- Ubuntu Trusty 14.04 (LTS)
对于Ubuntu Trusty,and Xenial,我们推荐安装 linux-image-extra-*
内核安装包。linux-image-extra-*
安装包允许你使用 aufs
存储驱动。
安装 linux-image-extra-*
步骤:
在你的Ubuntu主机上打开终端。
更新你的包管理器。
$ sudo apt-get update
安装推荐的包。
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
安装Docker。
Ubuntu Precise 12.04 (LTS)
对于 Ubuntu Precise,Docker需要3.13内核版本。 如果你的内核版本低于3.13, 你必须更新内核。更具下面的表格查看你的环境需要安装哪些安装包:
安装包 | 描述 |
---|---|
linux-image-generic-lts-trusty | Generic Linux kernel image. 这个内核内建了运行Docker需要的AUFS。 |
linux-headers-generic-lts-trusty | 像ZFS 和 VirtualBox guest additions基于这个包。如果你没有为你的内核安装这些headers,你可以跳过这些headers在”trusty” 内核。 如果你不确定是否安装,你最好安装一下。 |
xserver-xorg-lts-trusty | 在没有图形环境的可选. 必需 当运行Docker在一个图形界面。 |
libgl1-mesa-glx-lts-trusty | 去了解更多安装这个包的原因, 月度backported kernels安装指南, 特别是 LTS Enablement Stack — 在每个版本的第5条提到。 |
更新你的内核和安装额外的包, 操作如下:
在你的Ubuntu主机上打开终端。
更新你的包管理器。
$ sudo apt-get update
安装必需的和额外的安装包。
$ sudo apt-get install linux-image-generic-lts-trusty
取决于你的环境,你可能要安装比前面表格上要多的包。
重启你的主机。
$ sudo reboot
当你的机器重启之后,安装Docker。
Install
确保在你的Ububtu环境安装了前面提到的软件。
然后,按下列步骤安装:
使用具有
sudo
权限的用户登录你的Ubuntu系统。更新你的
APT
包索引。$ sudo apt-get update
安装 Docker。
$ sudo apt-get install docker-engine
开启
docker
守护进程。$ sudo service docker start
验证
docker
是否安装正确。$ sudo docker run hello-world
这条命令下载一个测试镜像并且在一个容器中运行它。当这个容器运行时, 他会打印一些信息然后退出。
Optional configurations
这部分包含一些额外的软件使你的Ubuntu更好的为Docker工作。
- Create a docker group
- Adjust memory and swap accounting
- Enable UFW forwarding
- Configure a DNS server for use by Docker
- Configure Docker to start on boot
Create a Docker group
docker
守护进程绑定在一个Unix socket 来代替TCP端口。 默认情况下 Unix socket 属于 root
用户和其它具有 sudo
权限的用户。因此,docker
守护进程总是使用root
用户运行。
为避免每次使用 docker
命令都要添加sudo
,创建一个叫做 docker
的Unix 用户组并使用它。当docker
守护进程启动,docker
用户组会分配Unix socket的读写权限。
警告:
docker
用户组等同于root
用户; 更多关于他和系统安装之间的冲突,查看Docker Daemon Attack Surface。
创建 docker
用户组和添加用户:
使用具有
sudo
权限的用户登录系统。创建
docker
用户组。$ sudo groupadd docker
添加你的用户到
docker
用户组。$ sudo usermod -aG docker $USER
重新登录用户。
确保你的用户拥有正确的权限。
使用没有
sudo
的命令运行docker
来验证你的工作。$ docker run hello-world
如果失败会显示下面的信息:
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
查看
DOCKER_HOST
环境变量是否设置,如果没有重新设置它。
Adjust memory and swap accounting
当用户运行Docker,它们会看到下面的信息:
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your |
阻止这些信息,在你的系统上开启 memory and swap accounting。开启 memory and swap accounting 会导致内存占用和效率下降,即时没有运行Docker。 大概会占用总内存的1%。效率大概下降10%。
开启 memory and swap on system 使用 GNU GRUB (GNU GRand Unified Bootloader),步骤如下:
使用具有
sudo
权限的用户登录你的系统。编辑
/etc/default/grub
文件。设置
GRUB_CMDLINE_LINUX
的值如下:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
保存并关闭文件。
更新 GRUB。
$ sudo update-grub
重启你的系统
Enable UFW forwarding
如果你使用 UFW (Uncomplicated Firewall) 在你运行Docker的主机上,你需要额外的配置。Docker 使用桥连来管理容器的网络。默认情况下, UFW 关闭所有的转发流量。因此,当Docker运行时开启了UFW, 你必需设置UFW的转发策略。
另外, UFW的默认设置是阻挡所有的流入流量。如果你希望你的每一个容器都能在Docker端口和远程的主机上通信。如果TLS启用,Docker的端口默认是 2376
否则则是 2375
。 如果TLS禁止, 通信会被拒绝。 默认情况下,Docker 运行在TLS关闭的情况下。
配置UFW和允许Docker端口流入流量:
使用具有
sudo
权限的用户登录系统。验证UFW是否安装和启用。
$ sudo ufw status
编辑
/etc/default/ufw
文件$ sudo nano /etc/default/ufw
设置
DEFAULT_FORWARD_POLICY
策略为:DEFAULT_FORWARD_POLICY="ACCEPT"
保存并关闭文件。
重新加载UFW。
$ sudo ufw reload
允许Docker端口的连接。
$ sudo ufw allow 2375/tcp
Configure a DNS server for use by Docker
在运行Ubuntu或者Ubuntu派生的桌面系统上一般使用 127.0.0.1
作为默认的nameserver
在配置文件 /etc/resolv.conf
中。 NetworkManager 也设置 dnsmasq
使用真实的DNS servers和设置nameserver 127.0.0.1
在文件 /etc/resolv.conf
中。
当使用这些配置运行容器在桌面机器中,Docker 用户可见下面的警告:
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers |
导致这个警告的的原因是Docker容器不能使用本地的DNS nameserver。取而代之,Docker使用外在的nameserver。
为了避免这些警告,你可以为你的Docker容器特别指定DNS server。或者,你可以禁止dnsmasq
在NetworkManager。可是,禁止dnsmasq
可能会导致DNS解析速度变慢。
在下面的指南描述了怎么配置Docker守护进程在Ubuntu 14.10或者更低的版本。Ubuntu 15.04或者以上版本使用systemd
作为启动和服务管理。查阅 control and configure Docker with systemd 去配置一个systemd
管理的守护进程。
为Docker指定具体的 DNS server:
使用
sudo
权限的用户登录Ubuntu系统。编辑文件
/etc/default/docker
。$ sudo nano /etc/default/docker
为Docker添加一项设置。
DOCKER_OPTS="--dns 8.8.8.8"
替换
8.8.8.8
为一个本地 DNS server 比如192.168.1.1
。你也可以指定多个DNS servers。 用空格把他们区分开,例如:--dns 8.8.8.8 --dns 192.168.1.1
警告: 如果你在一个网络多变的笔记本上做这些配置, 要确保选择一个公共的 DNS server.
保存文件。
重启Docker 守护进程。
$ sudo service docker restart
Or, as an alternative to the previous procedure, 在NetworkManager里禁止 dnsmasq
(这可能导致你网速变慢)。
编辑文件
/etc/NetworkManager/NetworkManager.conf
。$ sudo nano /etc/NetworkManager/NetworkManager.conf
注释
dns=dnsmasq
这一行:dns=dnsmasq
保存文件。
重启NetworkManager 和 Docker。
$ sudo restart network-manager
$ sudo restart docker
Configure Docker to start on boot
Ubuntu 使用 systemd
作为他的boot and service 管理器在 15.04
版本以上,使用upstart
在版本 14.10
及以下。
对于 15.04
及以上版本,要配置docker
守护进程在启动时就运行,执行:
$ sudo systemctl enable docker |
对于 14.10
及其以下版本在安装的过程中已经自动配置 upstart
开机自动启动。
Upgrade Docker
使用 apt-get
安装最新版本的Docker:
$ sudo apt-get upgrade docker-engine |
Uninstallation
卸载Docker安装包:
$ sudo apt-get purge docker-engine |
要卸载Docker安装包和依赖,下面的命令已不再需要:
$ sudo apt-get autoremove --purge docker-engine |
上述命令不会删除主机上的镜像,容器,卷或用户创建的配置文件。 如果要删除所有镜像,容器和卷,请运行以下命令:
$ rm -rf /var/lib/docker |
你必需手动的删除用户配置文件。