《Docker Deep Dive》Note
Docker 引擎
1. 概览
graph TB A(Docker client) --- B(daemon) subgraph Docker 引擎 B --- C(containerd) C --- D(runc) end
Docker 引擎是用来运行和管理容器的核心软件。 主要构成:Docker Client、Docker daemon(Docker守护进程)、containerd、runc。docker
2. 详解
graph TB A(Docker client) --- B(Docker daemon) B --- C(containerd) subgraph 容器Supervisor C --- D(shim) D --- D1(runc) D1 --- D2[运行容器] C --- E(shim) E --- E1(runc) E1 --- E2[运行容器] C --- F(shim) F --- F1(runc) F1 --- F2[运行容器] C --- G(shim) G --- G1(runc) G1 --- G2[运行容器] end
3. 开放容器计划(OCI)
基于 OCI 的标准,Docker 引擎采用模块化设计。 开放容器计划定义了两个容器相关的规范:安全
Docker 引擎尽量实现了OCI的规范,Docker daemon 再也不包含任何容器运行时的代码,全部的容器运行时代码在一个单独的OCI兼容层中实现。网络
4. runc
runc 是 OCI 容器运行时规范的参考实现(容器运行时)。 runc 只有一个做用--建立容器。 基于 Libcontainer。less
5. containerd
containerd 的做用是容器的生命周期管理。 containerd 在 Linux 和 Windows 中以 Daemin 的方式运行。 containerd 也包含诸如镜像管理的模块化功能。模块化
6. 启动容器
graph TB A(Docker client) --向 Docker API 发出 docker container run 命令--> B(Docker daemon) B --在 API 端点接收指令 指示 containerd 启动新容器--> C(containerd) C --给 runc 传递 OCI bundle即镜像 指示 runc 建立容器--> D(shim) subgraph runc D --> E(runc) E --> F(运行容器) end
7. 解耦模型的优点
daemonless container设计
- Docker daemon 的维护和升级工做不会影响到运行中的容器。
8. shim 组件
- 保持全部 STDIN 和 STDOUT 流是开启状态,从而当 daemon 重启的时候容器不会由于管道(pipe)的关闭而终止。
- 将容器的退出状态反馈给 daemon。
9. daemon
目前仍然有不少功能是在 Docker daemon 中实现的。 其中多数功能可能会随着时间推移被拆解。 目前 daemon 中存在但不只限的功能包括:API、镜像管理、身份认证、安全特性、核心网络以及卷。生命周期
由此能够得出结论:Docker 引擎的模块化工做仍在进行中。进程
The end Last updated by Jehornip