Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职。
1、用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。
2、Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。
3、Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
4、Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。
5、当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker容器网络环境。
6、当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。
7、Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。
Docker Client「发起请求」
1、Docker Client 是 和 Docker Daemon 建立通信的客户端。用户使用的可执行文件为 docker(一个命令行可执行文件),docker 命令使用后接参数的形式来实现一个完整的请求命令(例如:docker images,docker 为命令不可变,images 为参数可变)。
2、Docker Client 可以通过以下三种方式和 Docker Daemon 建立通信:tcp://host:port、unix://pathtosocket 和 fd://socketfd
3、Docker Client 发送容器管理请求后,由 Docker Daemon 接受并处理请求,当 Docker Client 接收到返回的请求相应并简单处理后,Docker Client 一次完整的生命周期就结束了。(一次完整的请求:发送请求→处理请求→返回结果),
Docker Engine
Docker Engine 是 Docker 架构中的运行引擎,同时也 Docker 运行的核心模块。它扮演 Docker Container 存储仓库的角色,并且通过执行 Job 的方式来操纵管理这些容器。
Job
一个 Job 可以认为是 Docker 架构中 Docker Engine 内部最基本的工作执行单元。Docker 可以做的每一项工作,都可以抽象为一个 Job。例如:在容器内部运行一个进程,这是一个 Job;创建一个新的容器,这是一个 Job。Docker Server 的运行过程也是一个 Job,名为 ServeApi。
Docker Registry(镜像注册中心)
Docker Registry 是一个存储容器镜像的仓库(注册中心),可理解为云端镜像仓库。按 Repository 来分类,docker pull 按照 [repository]:[tag] 来精确定义一个具体的 Image。
Graph 「Docker 内部数据库」
Repository
已下载镜像的保管者(包括下载的镜像和通过 Dockerfile 构建的镜像)。
一个 Repository 表示某类镜像的仓库(例如:Ubuntu),同一个 Repository 内的镜像用 Tag 来区分(表示同一类镜像的不同标签或版本)。一个 Registry 包含多个Repository,一个 Repository 包含同类型的多个 Image。
镜像的存储类型有 Aufs、Devicemapper、Btrfs、Vfs等。其中 CentOS 系统 7.x 以下版本使用 Devicemapper 的存储类型。
Driver 「执行部分」
Driver 是 Docker 架构中的驱动模块。通过 Driver 驱动,Docker 可以实现对 Docker 容器执行环境的定制。即 Graph 负责镜像的存储,Driver 负责容器的执行。
Graphdriver
Graphdriver 主要用于完成容器镜像的管理,包括存储与获取。
存储:docker pull 下载的镜像由 Graphdriver 存储到本地的指定目录( Graph 中 )。
获取:docker run(create)用镜像来创建容器的时候由 Graphdriver 到本地 Graph中获取镜像。
Networkdriver 的用途是完成 Docker 容器网络环境的配置,其中包括:
Docker 启动时为 Docker 环境创建网桥。Docker 容器创建时为其创建专属虚拟网卡设备。Docker 容器分配IP、端口并与宿主机做端口映射,设置容器防火墙策略等。
Docker Container( Docker 容器 )是 Docker 架构中服务交付的最终体现形式。
Docker 按照用户的需求与指令,订制相应的 Docker 容器:
- 用户通过指定容器镜像,使得 Docker 容器可以自定义 rootfs 等文件系统。
- 用户通过指定计算资源的配额,使得 Docker 容器使用指定的计算资源。
- 用户通过配置网络及其安全策略,使得 Docker 容器拥有独立且安全的网络环境。
- 用户通过指定运行的命令,使得 Docker 容器执行指定的工作。
暂无评论内容