Docker架構
爲了更好的使用Docker和理解Docker中一些不常見的行爲,我們最好了解在Docker表層之下的一些東西。
在下面的圖片中,我們可以看到Docker安裝的主要元件
中間部分是Docker daemon,負責創建,運行和監控容器,同時構建和存儲鏡像,Docker daemon通過docker daemon命令來運行,通常由宿主機管理。
Docker client位於右手邊,用於和Docker daemon通過HTTP通信,默認情況下這主要是通過Unix domain socket通信,但是也可以使用TCP socket來讓遠端客戶作爲系統管理socket。因爲所以的事情都可以通過HTTP來完成,也很容易讓遠端用戶連接和使用開發語言來綁定,但是這也有一些實現上的指示。用於和daemon交流的API已經良好的定義和寫好了文檔,開發者可以直接寫程序來與daemon交互而無需使用Docker client。最後,Docker client和daemon在同一個二進制裏面分發。
Docker registries存儲和分發鏡像。默認的registry是Docker Hub,託管了成千上萬的鏡像。許多組織運行他們自己的registry可以用戶存儲金融的或敏感的鏡像,或者避免了網絡擁擠。 以後我們可以試着運行自己的registry。 Docker daemon會回覆docker pull的請求從registry下載鏡像。它也會通過docker run請求和Dockerfile中的FROM指令自動下載鏡像的,前提是本地沒有鏡像。
底層的技術
Docker daemon使用"execution driver"來創建容器,默認,這是Docker自己的runc驅動,但是也有合法的支持LXC的去掉。Runc與下面的kernel特性聯繫緊密
cgroups:負責管理被容器使用的資源(例如,CPU和內存使用情況)。他們也可以負責凍結和解凍容器,被用於docker pause功能。
namespace負責隔離容器,確保容器的文件系統,主機名,網絡和進程和剩餘的系統隔離開來。
UFS用於存儲容器的層(layers)。UFS提供一個或多個的存儲驅動,例AUFS,devicemapper,BTRFS或者Overlay。
相關的技術
Docker引擎和Docker Hub沒有組成一個完成的容器解決方案。許多用戶會發現他們需要服務和軟件,例如集羣管理,服務發現工具和更的高網絡性能。Docker Inc計劃構建一個完全的開箱即用(out-of-the-box)的方案。也就是可替換電池戰略,主要涉及到API的層次,允許元件連接Docker Engine,並且支持Docker 技術打包爲一個獨立的二進制,來很容易的替換第三方的等價元件。
下面包含了一些Docker支持的技術
Swarm ,Docker集羣解決方案。Swarm可以爲幾個容器分組,允許用戶把他們當做統一的資源來用
Compose 是一個工具用來構建和運行由多個Docker容器組成的應用。主要用於開發和測試而不是成產環境
Machine 安裝和配置Docker主機在本地或遠程資源
Kitematic 用於管理Docker 的MAC OS和windos GUI
Docker Trusted Registry 目前沒開源的產品
已經有大量的第三方服務和應用和Docker相處的很好,幾個解決方案也已經在下面的領域合併了
Networking Weave 和 Project Calico
Service discovery Consul, Registrator, SkyDNS, 和 etcd.
Orchestration and cluster management
Kubernetes from Google, Marathon (a frame‐ work for Mesos), CoreOS’s Fleet, and Docker’s own Swarm tooling.
當然還有其他各種各樣的插件了。