containerd 是 docker engine 的底层运行时组件,负责容器生命周期管理,自 docker 1.11 起被拆分并独立演进;2017 年捐赠给 cncf 后专注稳定性、安全性和 cri 兼容,kubernetes 1.24+ 因其原生支持 cri 而移除 dockershim。

Containerd 是 Docker Engine 的核心运行时组件,不是它的替代品,而是被拆分出来、独立演进的底层服务。
Docker Engine 依赖 containerd 完成实际容器操作
Docker 1.11 版本起,Docker Engine 就将容器生命周期管理功能下沉到 containerd。当你执行 docker run,Docker CLI 先与 dockerd(Docker Daemon)通信,daemon 再通过 gRPC 调用本地运行的 containerd 服务;containerd 最终调用 runc 创建符合 OCI 标准的 Linux 容器。整个过程里,dockerd 是“协调者”,containerd 是“执行者”。
containerd 已脱离 Docker 独立发展
2017 年,Docker 公司把 containerd 捐赠给 CNCF,成为顶级项目。它不再随 Docker Engine 版本绑定更新,而是按自身节奏发布(如 v2.0 系列),专注稳定性、安全性和 CRI 兼容性。Kubernetes 1.24+ 彻底移除 dockershim,正是因为 containerd 原生支持 CRI,而 dockerd 需要额外适配层。
二者职责边界清晰
- Docker Engine:提供完整用户体验——CLI 命令(build/push/run/compose)、镜像构建引擎、本地 Registry 支持、Swarm 编排等上层能力
- containerd:只管“运行时”——拉取/存储镜像、创建/启停容器、管理快照和挂载、对接 CNI 网络与 CSI 存储,不处理构建或编排逻辑
部署形态不同
Docker Engine 是一个包含多个子进程(dockerd、containerd、runc、docker-proxy 等)的复合守护进程;而 containerd 可单独部署为系统级服务(如 systemd unit),被 Kubernetes、Podman、Faasd 等多种系统直接调用,无需 Docker 生态依赖。











