第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常见操作命令。