1.1.1.1、Ubuntu

来源:互联网 发布:天涯明月刀数据 编辑:程序博客网 时间:2024/05/12 07:11

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 -r3.11.0-15-generic

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

更新你的 apt 源

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

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

  2. 打开一个终端窗口。

  3. 添加一个新的 gpg key。

    $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  4. 使用你喜欢的编辑器打开 /etc/apt/sources.list.d/docker.list 文件。

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

  5. 清空文件已有的内容。

  6. 为你的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.04deb https://apt.dockerproject.org/repo ubuntu-vivid main# Ubuntu Wily 15.10deb https://apt.dockerproject.org/repo ubuntu-wily main
  7. 保存并关闭 /etc/apt/sources.list.d/docker.list 文件。

  8. 更新 apt 包索引。

    $ apt-get update
  9. 清除旧的仓库(repo),如果它存在。

    $ apt-get purge lxc-docker*
  10. 核实 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 :

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

  2. 更新你的包管理器。

    $ sudo apt-get update
  3. 安装推荐的包。

    $ sudo apt-get install linux-image-extra-$(uname -r)
  4. 继续并安装 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

升级你的内核并安装相关的依赖包:

  1. 打开一个终端。

  2. 更新你的包管理器。

    $ sudo apt-get update
  3. 安装必选和可选的包。

    $ sudo apt-get install linux-image-generic-lts-trusty

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

  4. 重启你的主机。

    $ sudo reboot
  5. 重启之后,继续安装Docker。

安装

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

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

  2. 更新你的 apt 包索引。

    $ sudo apt-get update
  3. 安装 Docker。.

    $ sudo apt-get install docker-engine
  4. 启动 docker daemon。

    $ sudo service docker start
  5. 核实 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 组并添加你的用户:

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

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

  2. 创建 docker 组并添加你的用户。

    $ sudo usermod -aG docker ubuntu
  3. 先登出,然后再登陆。

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

  4. 通过执行不带 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: Yourkernel does not support swap limit capabilities. Limitation discarded.

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

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

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

  2. 编辑 /etc/default/grub 文件。

  3. 设置 GRUB_CMDLINE_LINUX 的值如下:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  4. 保存并关闭文件。

  5. 更新 GRUB。

    $ sudo update-grub
  6. 重启你的系统。

开启 UFW 转发

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

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

配置 UFW 允许输入连接到 Docker 端口上:

  1. 使用用户的 sudo 权限登录到系统。

  2. 核实 UFW 是否已经安装和被开启。

    $ sudo ufw status
  3. 打开 /etc/default/ufw 文件。

    $ sudo nano /etc/default/ufw
  4. 设置 DEFAULT_FORWARD_POLICY 策略如下:

    DEFAULT_FORWARD_POLICY="ACCEPT"
  5. 保存并关闭文件。

  6. 重载 UFW 使配置生效。

    $ sudo ufw reload
  7. 允许输入连接到 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 containerscan't use it. Using default external servers : [8.8.8.8 8.8.4.4]

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

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

为Docker指定一个DNS 服务:

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

  2. 打开 /etc/default/docker 文件。

    $ sudo nano /etc/default/docker
  3. 为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服务。

  4. 保存并关闭文件。

  5. 重启Docker daemon(守护进程)。

    $ sudo restart docker

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

  1. 打开 /etc/NetworkManager/NetworkManager.conf 文件。

    $ sudo nano /etc/NetworkManager/NetworkManager.conf
  2. 注释掉 dns=dsnmasq 这行内容:

    dns=dnsmasq
  3. 保存并关闭文件。

  4. 重启网络管理器和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/>
 
0 0