Docker的總體架構
今天給大家介紹一下docker的總體架構:
解析:
docker通過driver模塊對容器進行定製管理,driver模塊主要包括了execdriver、networkdriver、graphdriver等。
execdriver主要負責對linux操作系統的namespace、cgroups、apparmor、SELinux等容器運行所需的系統操作進行的二次封裝,類似於LXC。
networkdriver是對docker網路環境的二次封裝。新建虛擬網卡、分配通信所需IP,服務訪問的埠和容器之間的網路通信、設置hosts、resov.conf、iptables等。
graphdriver是與鏡像相關的操作,會維護一組與docker工作目錄下的對應的目錄,並記下容器和鏡像之間的元數據信息。
而大部分的鏡像相關的操作都會與graph有關,記錄著鏡像和容器之間的關聯信息。
概念:
API server
API server主要功能是client與server之間,以及內部各個組件之間相互通信,有點像cloudfoundary中的NATS的功能(消息匯流排),client通過apisevrer發送請求給server,內部各個組件相互協作也需要通過APIserver完成任務。
libContainer
libcontainer是一個容器管理包,功能實現上涵蓋了包括namespaces使用、cgroups管理、Rootfs的配置啟動、默認的Linux capability許可權集、以及進程運行的環境變數配置。內核版本最低要求為2.6,最好是3.8。
Docker daemon
docker daemon是一個重要的概念,是docker後台進程,它負責接收來自client的請求,並將請求轉發給相對應的組件完成請求任務和返回結果。其內部存在一個路由調度,完成請求轉發工作。
UnionFS
Unionfs是一個堆棧式的聯合文件系統 , 它可以把多個目錄(也叫分支)內容合併在一起, 而目錄的物理位置是分開的. Unionfs允許只讀和可讀寫目錄並存, 就是說可同時刪除和增加內容. Unionfs應用的地方很多, 具有寫時複製(copy-on-write)功能Unionfs可以把只讀和可讀寫文件系統合併在一起, 虛擬上允許只讀文件系統的修改可以保存到可寫文件系統當中.
Linux Kernel
linux kernel 是linux系統的內核,docker工作原理與內核關聯比較少,在這裡不做解釋。
推薦閱讀:
TAG:Docker |