1.1.1.1、Ubuntu

翻译 2015年11月19日 20:55:23

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 指向新的仓库:

  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.04
    deb https://apt.dockerproject.org/repo ubuntu-vivid main# Ubuntu Wily 15.10
    deb 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 组

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: Your
kernel 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 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 服务:

  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/>
 

(1.1.1.1)大数相乘

方法(一): 关于大数乘法,可以使用数组来模拟小学三年级的乘法竖式计算过程,代码如下: [cpp] view plaincopy #include "iostream"   ...
  • fei20121106
  • fei20121106
  • 2015年09月18日 10:25
  • 550

StarUML分析实现笔记(1)

适用于准备入门面向对象编程的同学,本文采用运算式的具体例子,从具体逻辑抽象出类,再进行UML图创建,最后编写出源码。...
  • hugh5
  • hugh5
  • 2015年05月24日 15:27
  • 828

Oracle RAC 环境下修改主机名

先看Oracle 官方文档上的两段说明:   (1)Can I change the public hostname in my Oracle Database 10g Cluster using...
  • libing13810124573
  • libing13810124573
  • 2013年06月29日 09:10
  • 1153

ubuntu 手动释放缓存 (清理内存cache)

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/p...
  • hanshileiai
  • hanshileiai
  • 2015年09月11日 17:45
  • 17210

Ubuntu环境变量——添加与删除

转自:http://beanocean.diandian.com/post/2013-11-09/40060047963 转自:
  • JDPlus
  • JDPlus
  • 2014年04月10日 11:21
  • 14846

安装Ubuntu后必须要做的几件事(二)--开发工具篇

安装完善的编辑套件讲开发没有编译器,那么一切都是浮云。 Ubunto默认是不安装g++的sudo apt-get install build-essential下面这些看自己爱好: 安装词法和语法...
  • gatieme
  • gatieme
  • 2015年04月27日 11:19
  • 16474

Ubuntu14.04.2中文语言支持与输入法设置

参考资料 [1]Ubuntu 14.04中文输入法的安装  [2]Ubuntu系统如何设置添加中文输入法...
  • Q1302182594
  • Q1302182594
  • 2015年07月26日 09:15
  • 18649

ubuntu下vi的使用

ubuntu下vi的使用 ssh之后对于服务器的文件,我习惯用gedit,但是不好修改,于是就用vi. 1、vi的基本概念   基本上vi可以分为三种状态,分别是命令模式(command mode)、...
  • w383117613
  • w383117613
  • 2015年08月13日 13:30
  • 3177

Ubuntu下重命名文件

在linux下修改文件的名字有很多种方法,常用的有mv和rename。 一,mv mv fromfile tofile 如把文件a.txt得命名为b.txt,可以是mv a.txt b.t...
  • Inuyasha1121
  • Inuyasha1121
  • 2016年06月12日 11:03
  • 20563

玩转Ubuntu Linux之加密文件系统篇

本文将详细介绍利用dm-crypt来创建加密文件系统的方法。与其它创建加密文件系统的方法相比,dm-crypt系统有着无可比拟的优越性:它的速度更快,易用性更强。除此之外,它的适用面也很广,能够运行在...
  • Fybon
  • Fybon
  • 2014年10月14日 15:45
  • 2748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1.1.1.1、Ubuntu
举报原因:
原因补充:

(最多只允许输入30个字)