Docker、containerd的关系
containerd
囊括了单机运行一个容器时所需要的一切:
为了能够支持多种OCI Runtime
,containerd
内部使用containerd-shim
,每启动一个容器都会创建一个新的containerd-shim
进程,指定容器ID,Bundle目录,运行时的二进制(比如runc)
1、docker
docker
本身而言,包括docker client
和dockerd
,是一个客户端工具,用来把用户的请求发送给docker daemon(dockerd)
。
dockerd
:dockerd
是对容器相关操作的最上层封装,直接面向操作用户。Docker daemon
,一般也会被称为docker engine
。dockerd
启动时会启动containerd
子进程。
2、containerd
containerd
是一个工业级别标准的容器运行时,它强调简单性、健壮性和可移植性,几乎囊括了单机运行一个容器运行时所需要的一切:执行、分发、监控、网络、构建、日志等。主要作用是:
- 1)、管理容器的生命周期(从创建容器到销毁容器)
- 2)、拉取/推送容器镜像
- 3)、存储管理(管理镜像及容器数据的存储)
- 4)、调用runC运行容器(与runC等容器运行时交互)
- 5)、管理容器网络接口及网络
dockerd
实际真实调用的还是containerd
的api接口,containerd
是dockerd
和runC
之间的一个中间交流组件。
3、containerd-shim
containerd-shim
是一个真实运行容器的载体,为了能够支持多种OCI Runtime
,containerd
内部使用containerd-shim
,每启动一个容器都会起一个新的containerd-shim
的进程。它通常指定三个因素:容器ID、bundle目录(对应某个容器生成的目录,一般位于:/var/run/docker/containerd/containerID)
4、runC
runC
是一个轻量级的工具,用来运行容器的,我们可以不用通过docker引擎,直接运行容器。