1. 程式人生 > >Docker體系結構

Docker體系結構

什麼是Docker

Docker是一個開源的應用容器引擎,使用Go語言開發,基於Linux核心的cgroup,namespace,Union FS等技術,對應用程序進行封裝隔離,並且獨立於宿主機與其他程序,這種執行時封裝的狀態稱為容器。

Docker早起版本實現是基於LXC,並進一步對其封裝,包括檔案系統、網路互聯、映象管理等方面,極大簡化了容器管理。從0.7版本以後開始去除LXC,轉為自行研發的libcontainer,從1.11版本開始,進一步演進為使用runC和containerd。

Docker理念是將應用及依賴包打包到一個可移植的容器中,可釋出到任意Linux發行版Docker引擎上。使用沙箱機制執行程式,程式之間相互隔離。

Namespaces
名稱空間,Linux核心提供的一種對程序資源隔離的機制,例如程序、網路、掛載點等資源。
CGroups
控制組,Linux核心提供的一種限制程序資源的機制;例如CPU、記憶體等資源。
UnionFS
聯合檔案系統,支援將不同位置的目錄掛載到同一虛擬檔案系統,形成一種分層的模型。

Docker體系結構

Containerd:是一個簡單的守護程序,使用runC管理容器。向DockerEngine提供介面。
Shim:只負責管理一個容器。

runC:是一個輕量級的工具,只用來執行容器。



Dockerfile、Docker映象和Docker容器的關係

Dockerfile 是軟體的原材料,Docker 映象是軟體的交付品,而 Docker 容器則可以認為是軟體的執行態。從應用軟體的角度來看,Dockerfile、Docker 映象與 Docker 容器分別代表軟體的三個不同階段,Dockerfile 面向開發,Docker 映象成為交付標準,Docker 容器則涉及部署與運維,三者缺一不可,合力充當 Docker 體系的基石。

簡單來講,Dockerfile構建出Docker映象,通過Docker映象執行Docker容器。