《第一本Docker书(修订版)》——2.2 在Ubuntu和Debian中安装Docker-阿里云开发者社区

开发者社区> 开发与运维> 正文

《第一本Docker书(修订版)》——2.2 在Ubuntu和Debian中安装Docker

简介: 这并不意味着上面清单之外的Ubuntu(或Debian)版本就不能安装Docker。只要有适当的内核和Docker所必需的支持,其他版本的Ubuntu也是可以安装Docker的,只不过这些版本并没有得到官方支持,因此,遇到的bug可能无法得到官方的修复。

本节书摘来自异步社区《第一本Docker书(修订版)》一书中的第2章,第2.2节,作者:【澳】James Turnbull(詹姆斯•特恩布尔)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 在Ubuntu和Debian中安装Docker

目前,官方支持在以下版本的Ubuntu和Debian中安装Docker:

Ubuntu Wily 15.10(64位);
Ubuntu Vivid 15.04(64位);
Ubuntu Trusty 14.04(LTS)(64位);
Ubuntu Precise 12.04(LTS)(64位);
Ubuntu Raring 13.04(64位);
Ubuntu Saucy 13.10(64位);
Debian 8.0 Jessie(64位);
Debian 7.7 Wheezy(64位)。
注意
这并不意味着上面清单之外的Ubuntu(或Debian)版本就不能安装Docker。只要有适当的内核和Docker所必需的支持,其他版本的Ubuntu也是可以安装Docker的,只不过这些版本并没有得到官方支持,因此,遇到的bug可能无法得到官方的修复。
安装之前,还要先确认一下已经安装了Docker所需的前提条件。我创建了一个要安装Docker的全新Ubuntu 14.04 LTS 64位宿主机,称之为darknight.example.com。
2.2.1 检查前提条件
在Ubuntu宿主机中安装并运行Docker所需的前提条件并不多,下面一一列出。

1.内核
首先,确认已经安装了能满足要求的Linux内核。可以通过uname命令来检查内核版本信息,如代码清单2-1所示。

代码清单2-1 检查Ubuntu内核的版本

$ uname -a
Linux darknight.example.com 3.13.0-43-generic #72-Ubuntu SMP Mon Dec
8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

可以看到,这里安装的是3.13.0 x86_64版本的内核。这是Ubuntu 14.04及更高版本默认的内核。

如果使用Ubuntu较早的发行版,可以有一个较早的内核。应该可以轻松地用apt-get把Ubuntu升级到最新的内核,如代码清单2-2所示。

代码清单2-2 在Ubuntu Precise中安装3.13内核

$ sudo apt-get update
$ sudo apt-get install linux-headers-3.13.0-43-generic
  linux-image-3.13.0-43-generic linux-headers-3.13.0-43

注意
本书中的所有操作都使用sudo来获取所需的root权限。
然后,就可以更新Grub启动加载器来加载新内核,如代码清单2-3所示。

代码清单2-3 更新Ubuntu Precise的启动加载器

$ sudo update-grub
安装完成后需要重启宿主机来启用新的3.8内核或者更新的内核,如代码清单2-4所示。

代码清单2-4 重启Ubuntu宿主机

$ sudo reboot
重启之后,可以再次使用uname –a来确认已经运行了正确版本的内核。

2.检查Device Mapper
这里将使用Device Mapper作为存储驱动。自2.6.9版本的Linux内核开始已经集成了Device Mapper,并且提供了一个将块设备映射到高级虚拟设备的方法。Device Mapper支持“自动精简配置”[18](thin-provisioning)的概念,可以在一种文件系统中存储多台虚拟设备(Docker镜像中的层)。因此,用Device Mapper作为Docker的存储驱动是再合适不过了。

任何Ubuntu 12.04或更高版本的宿主机应该都已经安装了Device Mapper,可以通过代码清单2-5所示的命令来确认是否已经安装。

代码清单2-5 检查Device Mapper

$ ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 Oct  5 18:50 /sys/class/misc/device-mapper
  -> ../../devices/virtual/misc/device-mapper

也可以在/proc/devices文件中检查是否有device-mapper条目,如代码清单2-6所示。

代码清单2-6 在Ubuntu的proc中检查Device Mapper

$ sudo grep device-mapper /proc/devices
如果没有出现device-mapper的相关信息,也可以尝试加载dm_mod模块,如代码清单2-7所示。

代码清单2-7 加载Device Mapper模块

$ sudo modprobe dm_mod
cgroup和命名空间自2.6版本开始已经集成在Linux内核中了。2.6.38以后的内核对cgroup和命名空间都提供了良好的支持,基本上也没有什么bug。

2.2.2 安装Docker
现在“万事俱备,只欠东风”。我们将使用Docker团队提供的DEB软件包来安装Docker。

首先,要添加Docker的APT仓库,如代码清单2-8所示。其间,可能会提示我们确认添加仓库并自动将仓库的GPG公钥添加到宿主机中。

代码清单2-8 添加Docker的ATP仓库

$ sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu- 
  trusty main > /etc/apt/sources.list.d/docker.list"

应该将trusty替换为主机的Ubuntu发行版本。这可以通过运行lsb_release命令来实现,如代码清单2-9所示。

代码清单2-9 查主机Ubuntu发行版本

$ sudo lsb_release --codename | cut -f2
trusty

接下来,要添加Docker仓库的GPG密钥,如代码清单2-10所示。

代码清单2-10 添加Docker仓库的GPG密钥

$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net
:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

之后,需要更新APT源,如代码清单2-11所示。

代码清单2-11 更新APT源

$ sudo apt-get update
现在,就可以安装Docker软件包了,如代码清单2-12所示。

代码清单2-12 在Ubuntu中安装Docker

$ sudo apt-get install docker-engine
执行该命令后,系统会安装Docker软件包以及一些必需的软件包。

提示
自Docker 1.8.0开始,Docker的软件包名称已经从lxc-docker变为docker-engine。
安装完毕,用docker info命令应该能够确认Docker是否已经正常安装并运行了,如代码清单2-13所示。

代码清单2-13 确认Docker已经安装在Ubuntu中

$ sudo docker info
Containers: 0
Images: 0
. . .

2.2.3 Docker与UFW
在Ubuntu中,如果使用UFW[19],即Uncomplicated Firewall,那么还需对其做一点儿改动才能让Docker工作。Docker使用一个网桥来管理容器中的网络。默认情况下,UFW会丢弃所有转发的数据包(也称分组)。因此,需要在UFW中启用数据包的转发,这样才能让Docker正常运行。我们只需要对/etc/default/ufw文件做一些改动即可。我们需要将这个文件中代码清单2-14所示的代码替换为代码清单2-15所示的代码。

代码清单2-14 原始的UFW转发策略

DEFAULT_FORWARD_POLICY="DROP"
代码清单2-15 新的UFW转发策略

DEFAULT_FORWARD_POLICY="ACCEPT"
保存修改内容并重新加载UFW即可,如代码清单2-16所示。

代码清单2-16 重新加载UFW防火墙

$ sudo ufw reload

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章