Torres-tao  

1、docker <--> dockerd

​ docker进程是docker客户端,dockerd进程是docker服务器端,它们的代码都在https://github.com/moby/moby项目里面。当在shell里面运行docker run hello-world后,docker程序被启动,这个程序就是docker的客户端,它的任务就是解析命令行参数,然后构造相应的启动容器请求,通过rest的方式发给dockerd。

2、dockerd <--> "docker hub"

​ 当dockerd收到客户端的运行容器请求后,发现本地没有相应的镜像(image),就会从docker hub取相应image。

3、dockerd <--> docker-containerd

​ dockerd拿到image后,就会在本地创建相应的容器,然后再做一些初始化工作后,最后通过grpc的方式通知docker-containerd进程启动指定的容器。

注:docker-containerd是和dockerd一起启动的后台进程,他们之间使用unix socket通信,协议是grpc

4、docker-containerd <--> docker-containerd-shim

​ docker-containerd和docker-containerd-shim都属于containerd项目,当docker-containerd收到dockerd的启动容器请求之后,会做一些初始化工作,然后启动docker-containerd-shim进程,并将相关配置所在的目录作为参数传给它。

5、docker-containerd-shim <--> docker-runc

​ docker-containerd-shim进程启动后,就会按照runtime的标准准备好相关运行时环境,然后启动docker-runc进程。

6、docker-runc <--> hello

​ runc进程打开容器的配置文件,找到rootfs的位置,并启动配置文件中指定的相应进程,runc会启动容器中的hello程序。

posted on 2022-04-06 10:41  雷子锅  阅读(134)  评论(0编辑  收藏  举报