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