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实例。
打开一个终端窗口。
添加一个新的
gpgkey。
$ 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.10Ubuntu 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
启动
dockerdaemon。
$ sudo service docker start
核实
docker已经安装成功。
$ sudo docker run hello-world
这条命令会下载一个测试镜像并在一个容器里运行它。当容器启动时,它会打印一个报告信息。之后,它退出运行。
可选配置
这个小节包含一些可选的步骤去配置你的Ubuntu系统,为Docker 提供更好的支持。创建一个docker组
调整内存和内存交换空间
启动 UFW 转发
为Docker设置一个 DNS 服务
设置 Docker 开机启动
创建一个 Docker 组
dockerdaemon 绑定一个 Unix socket 替代你一个 TCP端口。默认情况下,Unix
socket 属于
root用户,其他用户只能使用
sudo才能访问。正是因为这个原因,
dockerdaemon
总是需要
root用户启动。
为了避免每次使用
docker命令时,需要频繁追加
sudo,可以创建一个名为
docker组并把有需要的用户添加进去。当
dockerdaemon
启动时,通过
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/>
相关文章推荐
- 开源RBAC权限引擎:Anycmd
- HDU 1024 给定一个数组,求其分成m个不相交子段和最大值
- XMPP即时通讯(代码实现)
- 004.UDP--拼接UDP数据包,构造ip头和udp头通信(使用原始套接字)
- 协议森林04 地址耗尽危机 (IPv4与IPv6地址)
- 南大软院大神养成计划——第四天
- TargetAction模式
- BootStrap中怎样学习响应式导航条
- CSS中em、rem和px的区别以及各个的优缺点
- HttpConnection及Apache HttpClient的一些常见用法的demo
- Hibernate
- 笔记:JavaScript高级程序设计(1)
- JAVA 学习过程
- c++程序编码
- Redhat安装*.jar软件包(二)
- Windows7 64位,python3.4.3,安装numpy
- MySQL学习笔记-04_Server_Config(mysqld --verbose --help)
- 【HDU5188 BestCoder Round 33C】【贪心排序+DP】zhx and contest 考试不被怀疑作弊条件下达到至少m分的最少时间
- 逻辑回归算法
- php 制作验证码