Docker 架构图

Docker 是一个容器平台,其用于构建,保护和管理从开发到生产在内部和云端的应用程序。总体来说,Docker 平台有很多组件,除了 Docker Desktop 外,还包括 Docker 镜像,Docker 容器,Docker 守护进程,Docker 客户端,Docker 注册表和 Docker Hub。他们的之前互相联系,形成如今的 Docker 平台:Docker 镜像定义了容器的内容。Docker 容器是可运行的镜像实例。Docker 守护进程是一个后台应用程序,用于管理和运行 Docker 镜像和容器。Docker 客户端是一个命令行实用程序,它调用 Docker 守护进程的 API。Docker 注册表包含镜像,Docker Hub 是一个广泛使用的公共注册表。大部分 Docker(但不是桌面)在Apache v2 许可下是开源的。

而从其架构和运行流程来看,Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。

Untitled

Docker 运行的基本流程为:

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 平台是一个工程复杂度很高的应用,每一次收费模式调整的背后,都牵涉到众多工程问题。而在 Docker 收费模式之外,其技术路径的成长可谓一波三折,甚至曾经历了两次死亡。