Docker、containerd、docker-shim、runC之間的關系


Docker、containerd、docker-shim、runC之間的關系

  • docker:docker本身而言包括了docker client和dockerd,dockerd實屬是對容器相關操作的api的最上層封裝,直接面向操作用戶;

  • containerd:dockerd實際真實調用的還是containerd的api接口(rpc方式實現),containerd是dockerd和runC之間的一個中間交流組件,理論上,不運行dockerd,也能夠直接通過containerd來管理容器。

    向上為Docker daemon提供gRPC接口,使得Docker Daemon屏蔽下面的結構變化,確保原有接口向下兼容。向下通過containerd-shim結合runC,使得引擎可以獨立升級。

  • docker-shim:真實運行容器的載體,每啟動一個容器都會起一個新的docker-shim的進程。它通過指定三個參數:容器ID、bundle目錄(containerd對應某個容器生成目錄),運行時二進制(默認是runC),來調用runC的api創建一個容器。

  • runC:運行容器的命令行工具,根據OCI的標准來創建和運行容器。Docker默認提供了docker-runc實現,事實上,通過containerd的封裝,可以在Docker Daemon啟動的時候指定runc的實現。

img

img

當Docker daemon啟動之后,dockerd和docker-containerd進程一直存在。當啟動容器之后,docker-containerd進程會創建docker-containerd-shim進程。最后docker-containerd-shim子進程,已經是實際在容器中運行的進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM