2.3.2 Docker架构
在了解各组件之前,请看图2-4描述的Docker的工作流程场景。左侧3个“docker”命令处代表了客户端(Client);中间的Docker主机中运行着Docker daemon(Docker守护进程);右侧表示了Docker镜像所在的仓库。该图描绘了使用Docker构建应用的整个场景:在客户端使用Docker命令从仓库拉取或更新,然后构建和运行。架构上Docker采用C/S经典模式,物理上Client和Server可位于同一台主机也可位于不同主机。
图2-4 Docker工作流
从图2-4的工作流程中,可以看出Docker主要包含如下3个角色。
1)软件:Docker的守护进程是dockerd,它负责管理容器和处理容器对象的持久化,并监听客户端和API发送的请求。Docker客户端程序(docker)是一个命令行工具,允许用户与Docker守护进程交互。我们后续的操作示例使用的都是Docker这一命令行工具。除此之外,下文还会引入Docker管理工具,比如Docker Compose。
2)对象:Docker对象是组装应用程序的各种实体,包括镜像(image)、容器(container)和服务(service)。Docker容器是运行应用程序的标准化封装环境,使用Docker API或CLI进行管理。容器之间相互隔离。Docker镜像是用于构建容器的只读模板(或称独立软件包),即前文提到的打包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置,其作用是存储和分发应用程序。Docker中的镜像是一个层级结构,从底层到上层分别是基础镜像、父镜像和自定义镜像。Docker服务允许跨多个Docker守护进程扩展容器,其结果被称为“swarm”,即一组通过Docker API进行通信的协作守护进程。
3)仓库:类似于Python中有很多package一样,Docker社区中也有很多镜像,这些镜像可以在Docker Hub(https://hub.docker.com)这样的仓库找到。客户端连接到仓库(registry),通过命令pull和push分别下载镜像供使用和上传构建好的镜像存储或分发。仓库可以是公共的或私有的。两个主要的公共仓库是Docker Hub和Docker Cloud,其中Docker Hub是默认仓库,读者可以在这个仓库中找到自己需要的镜像,也可上传个人的镜像公开给大家。私有的仓库则需要自己搭建。