天天看點

《容器技術系列》一1.2 Docker總架構圖

本節書摘來華章計算機《容器技術系列》一書中的第1章 ,第1.2節,孫宏亮 著, 更多章節内容可以通路雲栖社群“華章計算機公衆号檢視。

作為linux平台上的一種容器的管理引擎,docker并不像其他大型分布式系統那樣複雜。docker的源碼總量并不多,而且清晰的源碼結構使得docker的學習成本并不高。換言之,docker源碼的學習過程并不枯燥,我們可以從中學到很多東西,如go語言的運用、docker架構的設計原理等。docker對使用者而言是一個簡單的c/s架構,使用者通過用戶端與伺服器端建立通信,而docker的後端是一個松耦合的架構,架構中的子產品各司其職、有機組合,支撐着docker運作。

docker的總架構如圖1-1所示。架構中主要的子產品有:dockerclient、dockerdaemon、docker registry、graph、driver、libcontainer以及docker container。

對使用者而言,docker client是與docker daemon建立通信的最佳途徑。使用者通過docker client發起容器的管理請求,請求最終發往docker daemon。

docker daemon作為docker架構中的主體部分,首先具備服務端的功能,有能力接收docker client發起的請求;其次具備docker client請求的處理能力。docker daemon内部所有的任務均由engine來完成,且每一項工作都以一個job的形式存在。

docker daemon需要完成的任務很多,是以job的種類也很多。若使用者需要下載下傳容器鏡像,docker daemon則會建立一個名為“pull”的job,運作時從docker registry中下載下傳鏡像,并通過鏡像管理驅動graphdriver将下載下傳的鏡像存儲在graph中;若使用者需要為docker容器建立網絡環境,docker daemon則會建立一個名“allocate_interface”的job,通過網絡驅動networkdriver配置設定網絡接口的資源……

libcontainer是一套獨立的容器管了解決方案,這套解決方案涉及了大量linux核心方面的特性,如:namespaces、cgroups以及capabilities等。libcontainer很好地抽象了linux的核心特性,并提供完整、明确的接口給docker daemon。

當使用者執行運作容器這個指令之後,一個docker容器就處于運作狀态,該容器擁有隔離的運作環境、獨立的網絡棧資源以及受限的資源等。

《容器技術系列》一1.2 Docker總架構圖

繼續閱讀