Docker在最开始的时候,可以认为是一个单体程序,docker客户端、docker守护进程、镜像管理等功能都是放在同一个程序中的,整个docker的安装非常简单,因为就一个可执行文件,在一定程度上也带来的docker的飞速发展。
随着容器技术的兴起,以及周边软件如mesos、kubernetes等容器编排平台的发展,人们迫切需要一个容器的开放标准,以便相关生态能更好更快的发展,于是便有了OCI这么一个组织,于是就有了docker功能的拆分。
目前的docker有这么几个模块
(1)Docker CLi docker客户端,也就是用户操作docker的命令行工具
/usr/bin/docker
该工具与dockerd进行交互,提交用户的request,接收dockerd的处理结果
(2)dockerd 守护进程 /usr/bin/dockerd
接收用户的请求,并将请求交由containerd进行处理
(3)containerd /usr/bin/docker-containerd
主要是管理容器的生命周期:创建、运行、终止、删除等;
除此之外,还负责:
镜像的管理
网络、存储相关的管理
containerd通过调用runc(一个符合OCI标准的容器运行时实现,由docker捐赠)来进行容器生命周期的管理;
containerd-shim /usr/bin/docker-containerd-shim
在runc启动一个容器之后,该容器会被containerd-shim接管,作为container的父进程存在
比如,在一个启动了两个容器的宿主机上