Docker在最開始的時候,可以認爲是一個單體程序,docker客戶端、docker守護進程、鏡像管理等功能都是放在同一個程序中的,整個docker的安裝非常簡單,因爲就一個可執行文件,在一定程度上也帶來的docker的飛速發展。
隨着容器技術的興起,以及周邊軟件如mesos、kubernetes等容器編排平臺的發展,人們迫切需要一個容器的開放標準,以便相關生態能更好更快的發展,於是便有了OCI這麼一個組織,於是就有了docker功能的拆分。
目前的docker有這麼幾個模塊
(1)Docker CLi docker客戶端,也就是用戶操作docker的命令行工具
/usr/bin/docker
該工具與dockerd進行交互,提交用戶的request,接收dockerd的處理結果
(2)dockerd 守護進程 /usr/bin/dockerd
接收用戶的請求,並將請求交由containerd進行處理
(3)containerd /usr/bin/docker-containerd
主要是管理容器的生命週期:創建、運行、終止、刪除等;
除此之外,還負責:
鏡像的管理
網絡、存儲相關的管理
containerd通過調用runc(一個符合OCI標準的容器運行時實現,由docker捐贈)來進行容器生命週期的管理;
containerd-shim /usr/bin/docker-containerd-shim
在runc啓動一個容器之後,該容器會被containerd-shim接管,作爲container的父進程存在
比如,在一個啓動了兩個容器的宿主機上