每天5分钟玩转Docker容器技术
上QQ阅读APP看书,第一时间看更新

2.3 How——容器是如何工作的

接下来学习容器核心知识的最主要部分。

我们首先会介绍Docker的架构,然后分章节详细讨论Docker的镜像、容器、网络和存储。

1. Docker架构

Docker的核心组件包括:

● Docker客户端:Client

● Docker服务器:Docker daemon

● Docker镜像:Image

● Registry

● Docker容器:Container

Docker架构如图2-10所示。

图2-10

Docker采用的是Client/Server架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST API与远程的服务器通信。

2. Docker客户端

最常用的Docker客户端是docker命令。通过docker我们可以方便地在Host上构建和运行容器。

docker支持很多操作(子命令),后面会逐步用到,如图2-11所示。

图2-11

除了docker命令行工具,用户也可以通过REST API与服务器通信。

3. Docker服务器

Docker daemon是服务器组件,以Linux后台服务的方式运行,如图2-12所示。

图2-12

Docker daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。

默认配置下,Docker daemon只能响应来自本地Host的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开TCP监听,步骤如下:

(1)编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service,在环境变量ExecStart后面添加 -H tcp://0.0.0.0,允许来自任意IP的客户端连接,如图2-13所示。

图2-13

如果使用的是其他操作系统,配置文件的位置可能会不一样。

(2)重启Docker daemon,如图2-14所示。

图2-14

(3)服务器IP为192.168.56.102,客户端在命令行里加上 -H参数,即可与远程服务器通信,如图2-15所示。

图2-15

info子命令用于查看Docker服务器的信息。

4. Docker镜像

可将Docker镜像看成只读模板,通过它可以创建Docker容器。

例如某个镜像可能包含一个Ubuntu操作系统、一个Apache HTTP Server以及用户开发的Web应用。

镜像有多种生成方法:(1)从无到有开始创建镜像;(2)下载并使用别人创建好的现成的镜像;(3)在现有镜像上创建新的镜像。

可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执行docker build <docker-file>命令可以构建出Docker镜像,后面我们会讨论。

5. Docker容器

Docker容器就是Docker镜像的运行实例。

用户可以通过CLI(Docker)或是API启动、停止、移动或删除容器。可以这么认为,对于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。

6. Registry

Registry是存放Docker镜像的仓库,Registry分私有和公有两种。

Docker Hub(https://hub.docker.com/)是默认的Registry,由Docker公司维护,上面有数以万计的镜像,用户可以自由下载和使用。

出于对速度或安全的考虑,用户也可以创建自己的私有Registry。后面我们会学习如何搭建私有Registry。

docker pull命令可以从Registry下载镜像。

docker run命令则是先下载镜像(如果本地没有),然后再启动容器。

7.一个完整的例子

还记得我们运行的第一个容器吗?现在通过它来体会一下Docker各个组件是如何协作的。

容器启动(如图2-16所示)过程如下:

图2-16

(1)Docker客户端执行docker run命令。

(2)Docker daemon发现本地没有httpd镜像。

(3)daemon从Docker Hub下载镜像。

(4)下载完成,镜像httpd被保存到本地。

(5)Docker daemon启动容器。

docker images可以查看到httpd已经下载到本地,如图2-17所示。

图2-17

docker ps或者docker container ls显示容器正在运行,如图2-18所示。

图2-18