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

相關文章
相關標籤/搜索