1. 程式人生 > 其它 >docker基礎_docker引擎內部原理

docker基礎_docker引擎內部原理

docker引擎內部原理

docker主要由以下主要元件構成:docker客戶端、docker守護程序(daemon)、containerd、runc、shim

daemon

daemon的主要功能包括映象管理、映象構建、REST API、身份驗證、安全、核心網路以及編排。

containerd

主要任務就是對容器的生命週期管理---start|stop|pause|rm......

shim

shim是實現無daemon的容器(用於將執行中的容器與daemon解耦,以便進行daemon升級等的操作)

containerd指揮runc來建立新容器。事實上,每次建立容器時它都會fork一個新的runc示例,一旦容器建立完成對應runc程序會退出,然後containerd-shim程序就會成為容器的父程序,shim部分職責如下

  • 保持所有STDIN和STDOUT流是開啟狀態,從而當daemon重啟的時候,容器不會因為管道的關閉而終止
  • 將容器的退出狀態反饋給daemon

runc

runc生來只有一個作用-----建立容器,這一點它速度很快

啟動一個新的容器
docker container run -it --name test 7faaec683238 bash
  • 當使用docker命令列工具執行如上命令是,docker客戶端會將其轉換為合適的api格式,併發送到正確的api端點

  • api是在daemon中實現的。這套功能豐富、基於版本的rest api已經成為docker的標誌

  • 一旦daemon接收到建立新容器的命令,它就會向containerd發出調令。(daemon已經不會再包含任何建立程式碼的模組了 分工明確)

  • 雖然名叫containerd 但是它並不負責建立容器,而是指揮runc去做。containerd將docker映象轉換為oci bundle 並讓runc基於此建立一個新容器

  • runc與作業系統核心介面進行通訊,基於所有必要的工具來建立容器。容器程序作為runc的子程序啟動,啟動完畢後,runc將會退出,然後containerd-shim程序就會成為容器的父程序

  • 由於將所有用於啟動、管理容器的邏輯和程式碼都從daemon中移除,意味著容器執行時與daemon是解耦的,對於docker daemon的升級維護工作不會影響到執行中的容器