Docker安装手记

2015/12/02 17:53 下午 posted in  技术 comments

Docker安装了老多次,也该整理点手记了

这几天在某内群中无意发现了一个人提到的Docker技术,觉得特别好奇,然后就买了几本书学起来。正好手头有不少服务器,因此就折腾了下,不过折腾的可不容易,因为shipyard的原因,两三次都把Docker的环境整崩了。不过也知道Docker的安装情况了。现在歇一歇,先把安装这几天的内容做个总结吧。

关于Docker,官方给了如下解释:

What is Docker?

Docker is an open platform for building, shipping and running distributed applications. It gives programmers, development teams and operations engineers the common toolbox they need to take advantage of the distributed and networked nature of modern applications.

什么是Docker?

Docker是一个为分发应用提供编译、转运和运行的开放平台。Docker让程序员、开发团队和运营工程师以一个共同的工具箱,并采取的现代应用程序的分布式和网络化特性来进行生产开发工作。

【个人翻译,有错请指出233333】

Docker的安装主要是有以下几个步骤:

  • 检查安装前提
  • 检查Device Mapper(Ubuntu适用)
  • 进行安装与配置

下面就把我在其中的几个平台(Ubuntu 14.04/CentOS 7/CentOS 6.x)的安装进行相关总结:

  • 在Ubuntu 14.04下安装:

    • 检查安装前提

    首先我们需要确认Linux内核,这里我们通过输入uname -a来查看内核,如我们可以看到:

      Linux darknight.example.com 3.8.0-23-generic #34~precise1-Ubuntu SMP Wed May 29 21:12:31 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 
    

    现在的Docker版本已经飙升到了1.8.0,需要Linux内核为3.10或以上的才是可以的(上图代码为《第一本Docker书》的代码,当时为1.6.0版本,可在不小于3.8的内核下安装,要是在现在就需要升级了。)

    如果说需要升级内核,我们需要执行以下命令来升级内核:

      sudo apt-get update
      sudo apt-get install linux-headers-3.8.0-27-generic linux-image-3.8.0-27-generic linux-headers-3.8.0-27
    

    (需要最高root权限)

    然后更新Grub启动加载器加载新内核并重启

      sudo uodate-grub
      sudo reboot
    
    • 检查Device Mapper

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

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

        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条目:

      sudo grep device-mapper /proc/devices

      如果没有出现device-mapper的相关信息,我们也可以尝试加载dm_mod模块

        sudo modprobe dm_mod 
      

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

      • 进行安装与配置

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

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

        sudo sh -c "echo deb https://get.Docker.io/ubuntu Docker main /etc/apt/sources.list.d/Docker.list"
      

      安装之前,我们首先需要确认已经安装了curl命令:

        whereis curl
      

      如果安装过,屏幕上会显示curl: /usr/bin/curl /usr/bin/X11/curl /usr/share/man/man1/curl.1.gz 如果没有找到curl命令,我们需要先安装它:

        sudo apt-get -y install curl 
      

      接下来,要添加Docker仓库的GPG密钥:

        $ curl -s https://get.Docker.io/gpg | sudo apt-key add - 
      

      注意结尾的-

      之后,我们需要更新APT源:

        sudo apt-get update 
      

      现在,我们就可以安装Docker软件包了:

        apt-get install lxc-Docker 
      

      执行该命令后,系统会安装Docker软件包以及一些必需的软件包。

      安装完毕,可以用Docker info命令来确认Docker是否已经正常安装并运行了:

        $ sudo Docker info  
      

      安装成功会显示:

        Containers: 0 
        Images: 0  
        ... 
      
  • 在CentOS 7/7.1下安装:

    • 检查安装前提

    首先我们需要确认Linux内核(测试机CentOS7.1),这里我们通过输入uname -a来查看内核,如我们可以看到:

      Linux 133-130-99-22 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    

    这里我们可以知道,CentOS7.1的内核默认是3.10,完全符合Docker 1.8.0的要求,因此无需做任何操作,直接进行安装配置。

    • 进行安装与配置

      Docker默认已经包含在CentOS-Extra仓库中,使用以下命令安装

        sudo yum install Docker
      
  • 在CentOS 6.x下安装

    • 检查安装前提

    (此处大部分与上面类似,故相同处略)

    由于CentOS 6.x内核(Linux 2.6.x)低于所需版本(Linux 3.x),因此我们需要升级内核至3.8。具体内核升级请见:CentOS 6.x 内核升级(2.6.32 -> 3.10.58)过程记录

    • 进行安装与配置

    本例是在CentOS 6.5上安装的。

    对于CentOS 6.5,Docker是 EPEL 仓库的一部分,因此需要确保已经加入EPEL的YUM源。在CentOS 6上,Docker的包名可能与桌面的Docker应用冲突,因此,它的包名改为了Docker-io。

      sudo yum -y remove Docker
      sudo yum install Docker-io
    

实测:

Ubuntu 14.04安装成功,CentOS 7安装成功,CentOS内核升级后宕机,无法继续操作。

如果有错误,欢迎各位在评论区指点批评。

参考文献 Reference:

  1. 图灵社区Docker安装及基本命令
  2. (澳)特恩布尔著.第一本Docker书[M].北京:人民邮电出版社.2015.
  3. Docker - Build, Ship, and Run Any App, Anywhere