1.3 Docker 引擎拆分的四个组件功能介绍
docker 项目,自 1.11.0 版本起,docker 引擎由一个单一组件,被拆分为四个项目分别是:
1、docker-daemon;2、containerd;3、containerd-shim;4、runc
Docker 引擎拆分的四个组件各自承担不同职责,形成了一个分层协作的容器生命周期管理架构:
-
dockerd(Docker Daemon)- 作用:对外提供 Docker API(如 CLI 命令、RESTful 接口),接收用户的操作请求(如创建容器、构建镜像)。
- 定位:作为 Docker 的对外入口层,负责高层命令解析与资源调度,但不直接操作容器。
-
containerd- 作用:
- 管理容器的生命周期(创建、启动、暂停、销毁);
- 管理镜像分发(拉取、推送、存储);
- 调用底层
containerd-shim执行容器操作。
- 定位:核心运行时管理层,解耦了 Docker Daemon 与底层容器运行时,提供标准化接口(gRPC API)供上层调用。
- 作用:
-
containerd-shim- 作用:
- 作为容器的运行时载体,托管容器进程;
- 屏蔽底层运行时细节,确保
containerd无状态化(重启containerd不影响容器运行); - 收集并转发容器退出状态。
- 定位:适配层,隔离运行时与容器管理器,增强稳定性与可维护性。
- 作用:
-
runc- 作用:
- 根据 OCI(Open Container Initiative)标准 创建和运行容器;
- 调用操作系统内核功能(如命名空间、cgroups)实现容器隔离。
- 定位:底层容器运行时,仅专注于容器进程的启动/停止,是轻量级标准化工具。
- 作用:
四组件协作流程示例
当运行 docker run 时:
dockerd接收命令 →containerd解析请求,准备镜像和配置 →containerd调用containerd-shim→containerd-shim启动runc→runc创建隔离环境并启动容器进程。
💡 架构优势:
- 解耦与模块化:各组件专注单一职责,升级/替换更灵活(如替换
runc为其他 OCI 运行时);- 稳定性:
containerd-shim隔离运行时故障,避免级联崩溃;- 标准化:
runc遵循 OCI 规范,推动容器生态兼容性。
注:早期 Docker 引擎是单体架构(
dockerd直接管理容器),拆分后提升了跨平台能力和可维护性。
时间是个伟大的作者,必将给出完美的答案。

浙公网安备 33010602011771号