Docker技术入门与实战
上QQ阅读APP看书,第一时间看更新

第2章 Docker的核心概念和安装

本章首先介绍Docker的三大核心概念:

□ 镜像(Image)

□ 容器(Container)

□ 仓库(Repository)

读者理解了这三个核心概念,就能顺利地理解Docker的整个生命周期。社区讨论很激烈的一个话题,就是Docker和Linux容器技术到底有何区别?相信读者在阅读完本章后,会得到更清晰的答案。

随后,笔者将介绍如何在常见的操作系统上安装Docker,包括Ubuntu、CentOS、Windows和MacOS等。

2.1 核心概念

Docker镜像

Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。

例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或用户需要的其他软件),可以把它称为一个Apache镜像。

镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并通过简单的命令就可以直接使用。

Docker容器

Docker容器(Container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

读者可以把容器看做一个简易版的Linux系统环境(这包括root用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序打包而成的应用盒子。

镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

Docker仓库

Docker仓库(Repository)类似于代码仓库,是Docker集中存放镜像文件的场所。

有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。仓库注册服务器的示例如图2-1所示。

图2-1 仓库和注册服务器

根据所存储的镜像公开分享与否, Docker仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。

目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。

当然,用户如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需将其从仓库上pull下来就可以了。

注意

可以看出,Docker利用仓库管理镜像的设计理念与Git非常相似。

2.2 安装Docker

Docker支持在主流的操作系统平台上使用,包括Ubuntu、CentOS、Windows以及MacOS系统等。当然,在Linux系列平台上是原生支持,使用体验也最好。

Ubuntu

1. Ubuntu 14.04及以上版本

Ubuntu 14.04版本官方软件源中已经自带了Docker包,可以直接安装:

        $ sudo apt-get update
        $ sudo apt-get install -y docker.io
        $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
        $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

以上流程使用Ubuntu 14.04系统默认自带docker.io安装包安装Docker,这样安装的Docker版本相对较旧。

读者也可通过下面的方法从Docker官方源安装最新版本。首先需要安装apt-transport-https,并添加Docker官方源:

        $ sudo apt-get install apt-transport-https
        $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7
        869245C8950F966E92D8576A8BA88D21E9
        $ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/
        sources.list.d/docker.list"
        $ sudo apt-get update

之后,可以通过下面的命令来安装最新版本的Docker:

        $ sudo apt-get install -y lxc-docker

在安装了Docker官方软件源后,若需要更新Docker软件版本,只需要执行以下命令即可升级:

        $ sudo apt-get update -y lxc-docker

注意

后文中使用$作为终端引导符时,表示非root权限用户;#代表是root用户。

2. ubuntu 14.04以下的版本

如果使用的是较低版本的Ubuntu系统,则需要先进行内核更新并重启系统后再进行安装:

        $ sudo apt-get update
        $ sudo apt-get install -y linux-image-generic-lts-raring linux-headers-generic-
        lts-raring
        $ sudo reboot

重启后,重复在Ubuntu 14.04系统的安装步骤即可。

CentOS

Docker支持CentOS 6及以后的版本。

对于CentOS 6系统可使用EPEL库安装Docker,命令如下:

        $ sudo yum install -y http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.
        noarch.rpm
        $ sudo yum install -y docker-io

对于CentOS 7系统,由于CentOS-Extras源中已内置Docker,读者可以直接使用yum命令进行安装:

        $ sudo yum install -y docker

目前在Centos系统中更新Docker软件有两种方法,一是自行通过源码编译安装,二是下载二进制文件进行更新。

Windows

目前Docker官方已经宣布Docker通过虚拟机方式支持Windows 7.1和8,前提是主机的CPU支持硬件虚拟化。由于近几年发布的Intel和AMD CPU基本上都已支持了硬件虚拟化特性,因此在Windows中使用Docker通常不会有硬件支持的问题。

由于Docker引擎使用了Linux内核特性,所以在Windows上运行的话,需要额外使用一个虚拟机来提供Linux支持。这里推荐使用Boot2Docker工具,它会首先安装一个经过加工与配置的ⅤirtualBox轻量级虚拟机,然后在其中运行Docker。主要步骤如下:

1)从https://docs.docker.com/installation/windows/下载最新官方Docker for Windows Installer。

2)运行Installer。这个过程将 安 装ⅤirtualBox,MSYS-git, boot2docker Linux ISO镜像,以及Boot2Docker管理工具。如图2-2所示。

图2-2 Windows下安装Docker

3)打开桌面的Boot2Docker Start程序,或者用以下命令:Program Files > Boot2Docker for Windows。此初始化脚本在第一次运行时需要输入一个SSH Key Passphrase(用于SSH密钥生成的口令)。读者可以自行设定,也可以直接按回车键,跳过此设定,如图2-3所示。

图2-3 Boot2Docker启动后界面

此时Boot2Docker Start程序将连接至虚拟机中的Shell会话,Docker已经运行起来了!

Mac OS

目前Docker已经支持Mac OS X 10.6 Snow Leopard及以上版本的Mac OS。

在Mac OS上使用Docker,同样需要Boot2Docker工具的支持。主要步骤如下:

1)下载最新官方Docker for OS X Installer。读者可以从https://docs.docker.com/installation/mac/下载。

2)双击运行安装包。这个过程将安装一个ⅤirtualBox虚拟机、Docker本身以及Boot2Docker管理工具,如图2-4所示。

图2-4 Mac OS上安装Boot2Docker

3)安装成功后,找到Boot2Docker(Mac系统的Application或“应用”文件夹中)并运行它。现在进行Boot2Docker的初始化:

        $ boot2docker init
        $ boot2docker start
        $ $(boot2docker shellinit)

读者将看到虚拟机在命令行窗口中启动运行,并显示Docker的启动信息,则说明Docker安装成功。当虚拟机初始化完毕后,可以使用boot2docker stop和boot2docker start来控制它。

注意:如果在命令行中看到如下提示信息:

        To connect the Docker client to the Docker daemon, please set: export  DOCKER_
        HOST=tcp://192.168.59.103:2375

可以执行提示信息中的语句:export DOCKER_HOST=tcp://192.168.59.103:2375。此语句的作用是在系统环境变量中设置Docker的主机地址。

2.3 本书环境介绍

本书的实践环境是一台装有Linux Mint 17的笔记本电脑,并使用虚拟机软件ⅤirturBox虚拟了一套Ubuntu 14.04系统,两套系统上都安装了Docker的1.3版本,虚拟机通过ⅤirturBox网络的NAT方式连接到外部,如图2-5所示。

图2-5 本书环境

其中,Ubuntu 14.04虚拟机将是主要的操作环境(自动获取的IP地址为10.0.2.15/24),而笔记本上装的Linux Mint环境(内网地址为10.0.2.2/24,外网地址为192.168.1.0/24段地址)将作

为本地私有仓库的服务器,演示跟仓库相关的操作。

读者可根据自己本地环境,选择搭建类似的环境。

2.4 本章小结

本章介绍了Docker的三大核心概念:镜像、容器和仓库。

通过这三大核心概念所构建的高效工作流程,毫无疑问,正是Docker得以从众多容器虚拟化方案中脱颖而出的重要原因。

熟悉Git和GitHub的读者,会理解这一工作流程为文件分发和合作所带来的众多优势。在后续章节,笔者将进一步地介绍围绕这三大核心概念的Docker常见操作命令。