《Docker Deep Dive》Note - Docker 引擎

《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。

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。

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 Jehorn

posted @ 2019-11-10 16:25  古宝只  阅读(453)  评论(0编辑  收藏  举报