《Docker Deep Dive》Note
Docker 引擎
1. 概覽
graph TB A(Docker client) --- B(daemon) subgraph Docker 引擎 B --- C(containerd) C --- D(runc) endDocker 引擎是用來運行和管理容器的核心軟體,
主要構成: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[運行容器] end3. 開放容器計劃(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(運行容器) end7. 解耦模型的優勢
daemonless container
- Docker daemon 的維護和升級作業不會影響到運行中的容器,
8. shim 組件
- 保持所有 STDIN 和 STDOUT 流是開啟狀態,從而當 daemon 重啟的時候容器不會因為管道(pipe)的關閉而終止,
- 將容器的退出狀態反饋給 daemon,
9. daemon
目前仍然有很多功能是在 Docker daemon 中實作的,
其中多數功能可能會隨著時間推移被拆解,
目前 daemon 中存在但不僅限的功能包括:API、鏡像管理、身份認證、安全特性、核心網路以及卷,
由此可以得出結論:Docker 引擎的模塊化作業仍在進行中,
The end
Last updated by Jehorn
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5136.html
標籤:其他
