談談docker,containerd,runc,docker-shim之間的關系
談談docker,containerd,runc,docker-shim之間的關系
關於containerd
關於containerd的一些詳解介紹,請參考containerd的官網:(https://containerd.io/)
關於docker
docker本身而言包括了,docker client和dockerd(docker daemon),dockerd本身實屬是對容器相關操作的api的最上層封裝,
直接面向操作用戶。
關於docker1.12.x
該版本的docker由 docker-client ,dockerd,containerd,docker-shim,runc組成,現在來談談每個組件是用來干嘛的:
dockerd
dockerd本身實屬是對容器相關操作的api的最上層封裝,直接面向操作用戶。
containerd
dockerd實際真實調用的還是containerd的api接口(rpc方式實現),containerd是dockerd和runc之間的一個中間交流組件。
docker-shim
docker-shim是一個真實運行的容器的真實墊片載體,每啟動一個容器都會起一個新的docker-shim的一個進程,
他直接通過指定的三個參數:容器id,boundle目錄(containerd的對應某個容器生成的目錄,一般位於:/var/run/docker/libcontainerd/containerID),
運行是二進制(默認為runc)來調用runc的api創建一個容器(比如創建容器:最后拼裝的命令如下:runc create 。。。。。)
runc
runc是一個命令行工具端,他根據oci(開放容器組織)的標准來創建和運行容器。
他們之間的關系如下圖: