新聞中心
Docker 引擎是用來運行和管理容器的核心軟件。通常人們會簡單地將其代指為 Docker 或 Docker 平臺。

公司主營業(yè)務:網(wǎng)站設計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出茅箭免費做網(wǎng)站回饋大家。
docker 引擎
基于開放容器計劃(OCI)相關標準的要求,Docker引擎采用了模塊化的設計原則,其組件是可替換的。
Docker 引擎由如下主要的組件構成: Docker 客戶端( Docker Client )、Docker 守護進程( Docker daemon )、containerd 以及runc。它們共同負責容器的創(chuàng)建和運行。
runc
runc實質(zhì)上是一個輕量級的、針對Libcontainer進行了包裝的命令行交互工具( Libcontainer取代了早期Docker架構中的LXC )。
runc生來只有一個作用一創(chuàng)建容器,速度很快!不過它是一個CLI 包裝器,實質(zhì)上就是一個獨立的容器運行時工具。因此直接下載它或基于源碼編譯二進制文件,即可擁有一個全功能的runc。 但它只是一個基礎工具,并不提供類似Docker引擎所擁有的豐富功能。 有時也將runc所在的那一層稱為“OCI 層”
containerd
在對Docker daemon的功能進行拆解后,所有的容器執(zhí)行邏輯被重構到一個新的名為containerd (發(fā)音為container-dee) 的工具中。它的主要任務是容器的生命周期管理———— start | stop | pause | rm….
containerd在Linux和Windows中以daemon的方式運行
Docker引擎技術棧中,containerd位于daemon和runc所在的OCI層之間
隨著時間的推移,它被賦予了更多的功能,如鏡像管理
常用的啟動容器的方法就是使用Docker命令行工具。下面的docker container run命令會基于alpine:latest鏡像啟動一個新容器。
$ docker container run --name ctrl -it alpine:latest sh
當使用Docker命令行工具執(zhí)行如上命令時,Docker客戶端會將其轉換為合適的API格式,并發(fā)送到正確的API端點。
API是在daemon中實現(xiàn)的。這套功能豐富、基于版本的REST API已經(jīng)成為Docker的標志。
一旦daemon接收到創(chuàng)建新容器的命令,它就會向containerd發(fā)出調(diào)用。daemon已經(jīng)不再包含任何創(chuàng)建容器的代碼了!
daemon使用一種CRUD風格的API,通過gRPC與containerd進行通信。雖然名叫containerd, 但是它并不負責創(chuàng)建容器,而是指揮runc去做。
containerd將Docker鏡像轉換為OCI bundle,并讓runc基于此創(chuàng)建一個新的容器。
然后,runc與操作系統(tǒng)內(nèi)核接口進行通信,基于所有必要的工具( Namespace、CGroup 等)來創(chuàng)建容器。容器進程作為runc的子進程啟動,啟動完畢后,runc 將會退出。
將所有的用于啟動、管理容器的邏輯和代碼從daemon中移除,意味著容器運行時與Docker daemon是解耦的,有時稱之為“無守護進程的容器(daemonless container)”,如此,對Docker daemon的維護和升級工作不會影響到運行中的容器。
shim
shim是實現(xiàn)無daemon的容器(用于將運行中的容器與daemon解耦,以便進行daemon升級等操作)不可或缺的工具。
containerd 指揮runc來創(chuàng)建新容器。事實上,每次創(chuàng)建容器時它都會fork一個新的runc實例。不過,一旦容器創(chuàng)建完畢,對應的runc進程就會退出。因此,即使運行上百個容器,也無須保持上百個運行中的runc實例。
一旦容器進程的父進程runc退出,相關聯(lián)的containerd-shim 進程就會成為容器的父進程。
作為容器的父進程,shim 的部分職責如下。
-
保持所有STDIN和STDOUT流是開啟狀態(tài),從而當daemon重啟的時候,容器不會因為管道( pipe)的關閉而終止。
-
將容器的退出狀態(tài)反饋給daemon。
daemon的作用
daemon的主要功能包括鏡像管理、鏡像構建、REST API、身份驗證、安全、核心網(wǎng)絡以及編排。
文章題目:淺談Docker引擎
文章網(wǎng)址:http://m.5511xx.com/article/dhpidhp.html


咨詢
建站咨詢
