《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

Docker 引擎是用來運行和管理容器的核心軟件。
主要構成:Docker Client、Docker daemon(Docker守護進程)、containerd、runc。
浙公網安備 33010602011771號