閱讀566 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

本節書摘來異步社區《容器技術係列》一書中的第1章 ,第1.2節,孫宏亮 著, 更多章節內容可以訪問雲棲社區“異步社區”公眾號查看。

1.2 Docker總架構圖

作為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容器就處於運行狀態,該容器擁有隔離的運行環境、獨立的網絡棧資源以及受限的資源等。


image

最後更新:2017-06-21 14:32:02

  上一篇:go  深度學習要多深,才能了解你的心?——DNN在搜索場景中的應用
  下一篇:go  《容器技術係列》一1.1 引言