您的位置:首页 > 其它

1.1.1.1、Ubuntu

2015-11-19 20:55 716 查看



Ubuntu

Docker 支持 Ubuntu以下版本:

Ubuntu Wily 15.10
Ubuntu Vivid 15.04
Ubuntu Trusty 14.04 (LTS)
Ubuntu Precise 12.04 (LTS)

这个章节会指导你使用Docker-managed发布包和安装机制去安装。使用这个包确保你获得Docker的最新发行版。如果你希望使用CentOS-managed 包,请查阅Centos的相关文档。

注意:Ubuntu Utopic 14.10 虽然还在Docker的
apt
仓库里,但是官方已经不支持它了。


先决条件

安装 Docker 需要一个不限版本的64位Ubuntu 。此外,你的内核必须 3.10 及以上。

内核低于 3.10 缺乏一些运行容器必须的特性。这些老版本的系统还存在一些“恶名昭昭"的bug,会导致数据的丢失和在某些条件下引起频繁的恐慌。

打开你的终端,使用
uname -r
命令查看你的内核版本:
$ uname -r
3.11.0-15-generic


注意:如果你以前有使用
apt
安装Docker,请务必先更新你的
apt
源指向新的Docker仓库。


更新你的 apt 源

Docker的
apt
仓库包含 Docker 1.7.1 和更高的版本。设置
apt
指向新的仓库:

如果你没有做过这样的操作,请使用一个拥有特权的用户登录到Ubuntu实例。

打开一个终端窗口。

添加一个新的
gpg
key。
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D


使用你喜欢的编辑器打开
/etc/apt/sources.list.d/docker.list
文件。

如果文件不存在,就创建它。

清空文件已有的内容。

为你的Ubuntu操作系统添加一个条目。

条目内容如下所示:
# Ubuntu Precise 12.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-precise main# Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty main# Ubuntu Vivid 15.04
deb https://apt.dockerproject.org/repo ubuntu-vivid main# Ubuntu Wily 15.10
deb https://apt.dockerproject.org/repo ubuntu-wily main


保存并关闭
/etc/apt/sources.list.d/docker.list
文件。

更新
apt
包索引。
$ apt-get update


清除旧的仓库(repo),如果它存在。
$ apt-get purge lxc-docker*


核实
apt
正在从正确的仓库拉取数据。
$ apt-cache policy docker-engine


从现在开始,当你执行
apt-get upgrade
时,
apt
会用新的仓库拉取。


Ubuntu 版本的先决条件

Ubuntu Wily 15.10
Ubuntu Vivid 15.04
Ubuntu Trusty 14.04 (LTS)

对于Ubuntu Trusty、Vivid 和 Wily,官方推荐去安装
linux-image-extra
内核包。
linux-image-extra
包允许你使用
aufs
作为存储驱动。

为你的内核版本安装
linux-image-extra


在你的Ubuntu主机上打开一个终端。

更新你的包管理器。
$ sudo apt-get update


安装推荐的包。
$ sudo apt-get install linux-image-extra-$(uname -r)


继续并安装 Docker。


Ubuntu Precise 12.04 (LTS)

对于 Ubuntu Precise,Docker 需要3.13 的内核版本。如果你的内核版本比这个低,你必须先升级它。 参考这个表格了解每个包需要的环境:

linux-image-generic-lts-trusty通用的Linux 内核镜像。这个内核已经内建了AUFS。这是Docker运行的必需依赖
linux-headers-generic-lts-trusty允许诸如ZFS和VirtualBox功能增强的包。如果你还没给你当前的内核装这些headers,你可以跳过这些headers。如果你不确定,为了安全期间,你应该包含这些包。
xserver-xorg-lts-trusty在没有Unity/Xorg的非图像化环境里是可选的。当Docker在图形化环境上运行就是必须包含。

了解这些包更多的信息,请阅内核补丁的安装说明,特别关注在 LTS Enablement Stack 每个版本中的第五条。
libgl1-mesa-glx-lts-trusty
升级你的内核并安装相关的依赖包:

打开一个终端。

更新你的包管理器。
$ sudo apt-get update


安装必选和可选的包。
$ sudo apt-get install linux-image-generic-lts-trusty


根据你的环境,你可能需要安装比上述表格列出更多的依赖。

重启你的主机。
$ sudo reboot


重启之后,继续安装Docker。


安装

确保你已经安装好所有的先决依赖。之后,使用如下步骤安装Docker:

使用一个带有
sudo
特权的用户登录到你的系统上。

更新你的
apt
包索引。
$ sudo apt-get update


安装 Docker。.
$ sudo apt-get install docker-engine


启动
docker
daemon。
$ sudo service docker start


核实
docker
已经安装成功。
$ sudo docker run hello-world


这条命令会下载一个测试镜像并在一个容器里运行它。当容器启动时,它会打印一个报告信息。之后,它退出运行。


可选配置

这个小节包含一些可选的步骤去配置你的Ubuntu系统,为Docker 提供更好的支持。

创建一个docker组

调整内存和内存交换空间

启动 UFW 转发

为Docker设置一个 DNS 服务

设置 Docker 开机启动


创建一个 Docker 组

docker
daemon 绑定一个 Unix socket 替代你一个 TCP端口。默认情况下,Unix
socket 属于
root
用户,其他用户只能使用
sudo
才能访问。正是因为这个原因,
docker
daemon
总是需要
root
用户启动。

为了避免每次使用
docker
命令时,需要频繁追加
sudo
,可以创建一个名为
docker
组并把有需要的用户添加进去。当
docker
daemon
启动时,通过
docker
组可以共享Unix
Socket的读写权限。

警告:
docker
组是和
root
用户等价的。关于这个设置对系统安全影响,请移步 Docker
Daemon 的攻击面去了解更多。

创建一个
docker
组并添加你的用户:

使用
sudo
特权登陆到你的系统。

这个过程里,假定你使用
ubuntu
用户登录。

创建
docker
组并添加你的用户。
$ sudo usermod -aG docker ubuntu


先登出,然后再登陆。

这样确保你的用户权限的正确性。

通过执行不带
sudo
docker
命令来核实设置是否成功。
$ docker run hello-world


如果得到类似如下的失败信息:
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?


检查
DOCKER_HOST
环境变量是否已经设置正确,如果没有,设置它。


调整内存和swap

当运行Docker时,使用镜像工作时,可能会看到如下的信息:
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.


为了避免这个提示,你可以在你的系统上开启内存和swap功能。这样做会消耗一定的内存和降低性能且不管你是否使用Docker。内存损耗大概占总的可用内存的1%。性能一般会下面接近10%。

可以使用 GNU GRUB 工具开启上述功能,具体操作如下:

先用用户的
sudo
权限登录到你的Ubuntu系统。

编辑
/etc/default/grub
文件。

设置
GRUB_CMDLINE_LINUX
的值如下:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"


保存并关闭文件。

更新 GRUB。
$ sudo update-grub


重启你的系统。


开启 UFW 转发

如果你在Docker宿主机上使用 UFW (简单的防火墙),你需要一些额外的配置。Docker 使用一个网桥去管理容器的网络。默认情况下, UFW 负责下发所有转发链路。因此,当Docker 在UFW 管理模式下工作时,你必须为Docker设置适当的UFW转发策略。

而且,UFW的默认设置会拒绝所有输入链路。如果你想让来自其他主机访问容器端口的请求能够“触摸“到你的容器。如果你启用了TLS ,Docker 端口默认是
2376
2375
且没有加密。默认情况下,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




为 Docker 配置一个DNS服务

Ubuntu 或 Ubuntu 衍生的桌面系统通常使用
127.0.0.1
作为默认的
nameserver
/etc/resolv.conf
文件里。网络管理器会设置
dnsmasq
去使用连接真实的DNS
服务并设置
nameserver 127.0.0.1
到 /
etc/resolv.conf


当使用上面的配置去启动容器,会得到如下警告信息:
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
can't use it. Using default external servers : [8.8.8.8 8.8.4.4]


出现这个警告,是因为Docker 容器没有使用本地的 DNS 域名服务。而是,默认使用了一个外部的域名服务。

为了避免出现这样的警告,你需要指定一个DNS服务给Docker容器。或者,你可以在网络管理器里禁用
dnsmasq
。但是,这样做会导致DNS解析某些网络时变慢。

为Docker指定一个DNS 服务:

使用用户的
sudo
权限登录到你的Ubuntu上。

打开
/etc/default/docker
文件。
$ sudo nano /etc/default/docker


为Docker添加如下设置:
DOCKER_OPTS="--dns 8.8.8.8"


8.8.8.8
替换成一个本地的 DNS 服务,诸如
192.168.1.1
。你也可以指定多个
DNS 服务,用空格分把它们隔开。例如:
--dns 8.8.8.8 --dns 192.168.1.1


警告:如果你正在一个笔记本上做这样的操作,且你的电脑需要连接到不同的网络,确保选择一个公共的DNS服务。

保存并关闭文件。

重启Docker daemon(守护进程)。
$ sudo restart docker


或者,选择前面的方法,禁用
dnsmasq
(这样会让你的网络变慢)。

打开
/etc/NetworkManager/NetworkManager.conf
文件。
$ sudo nano /etc/NetworkManager/NetworkManager.conf


注释掉
dns=dsnmasq
这行内容:
dns=dnsmasq


保存并关闭文件。

重启网络管理器和Docker。
$ sudo restart network-manager
$ sudo restart docker



设置 Docker 开机启动

Ubuntu 在
15.04
及以上版本,使用了
systemd
作为它的引导和服务管理器,而
14.10
以下版本使用
upstart


15.04
及以上版本,如下设置:
$ sudo systemctl enable docker


至于
14.10
及以下版本,在安装的时候自动设置
upstart
让Docker
daemon开机启动。


升级 Docker

使用
apt-get
安装最新的版本:
$ apt-get upgrade docker-engine


卸载

使用下面指令卸载Docker:
$ sudo apt-get purge docker-engine


使用下面指令可以删除Docker及其依赖的包:
$ sudo apt-get autoremove --purge docker-engine


上面的命令不会删除保存本地的镜像、容器、数据卷或用户创建的配置文件。如果你想删除它们,可以使用如下命令:
$ rm -rf /var/lib/docker


你必须手动删除用户创建的配置文件。

来源: <https://docs.docker.com/engine/installation/ubuntulinux/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: