談談docker,containerd,runc,docker-shim,OCI之間的關系
一、containerd
關於containerd的一些詳解介紹,請參考containerd的官網
二、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是一個CLI工具,用於根據OCI規范生成和運行容器。
他們之間的關系如下圖:
OCI
Open Container Initiative(開放容器計划)是一個開放治理結構,其明確目的是圍繞容器格式和運行時創建開放行業標准。
OCI由Docker和其他容器行業的領導者於2015年6月建立,目前包含兩個規范:運行時規范(runtime-spec)和映像規范(image-spec)。 運行時規范概述了如何運行在磁盤上解壓縮的“文件系統包”。 在較高級別上,OCI實現將下載OCI映像,然后將該映像解壓縮為OCI運行時文件系統捆綁包。 此時,OCI運行時捆綁包將由OCI運行時運行。