首页 新闻 会员 周边

在 Kubernetes 的生产环境中,Containerd 已经取代了 Docker 成为默认的容器运行时。

0
[已关闭问题] 关闭于 2026-06-09 07:42

● 官方推荐:Kubernetes 官方文档明确推荐使用 Containerd 作为运行时。自 Kubernetes 1.24 版本起,官方已经正式移除了对 Docker 的内置兼容层(dockershim)。
● 云厂商标准:目前主流的云服务商(如阿里云 ACK、AWS EKS、腾讯云 TKE 等)在提供托管 Kubernetes 服务时,底层默认使用的都是 Containerd。

*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1762
提问于:2026-06-09 07:36
< >
分享
所有回答(1)
0

● Dockershim:这是它早期的名字,当时它的代码是直接内嵌在 Kubernetes 的 kubelet 组件里的。
● cri-dockerd:这是它现在的独立名字。后来为了减轻 Kubernetes 的维护负担,它被剥离出来,变成了一个独立的程序。

1. 早期的“翻译官”:Dockershim
在 Kubernetes 早期,这个翻译官叫 dockershim 。当时它的代码是直接写在 Kubernetes 官方代码库里的,由 Kubernetes 社区负责维护。
2. 官方“开除”翻译官
随着容器技术的发展,Kubernetes 官方觉得维护这个翻译官太耗费精力了,于是在 Kubernetes 1.24 版本中,正式把 dockershim 从官方代码库里移除了。
3. 谁来接手?Mirantis 与 Docker 联手
官方移除后,大家如果还想用 Docker,就需要一个独立的翻译官。这时候,Mirantis 公司(他们在 2019 年收购了 Docker 的企业级业务部门)站了出来。
Mirantis 和 Docker 公司联合开发了一个全新的、独立的翻译官,也就是我们前面提到的 cri-dockerd 。



2. 它的核心工作(您总结得非常精准)
它的作用就是把 Kubernetes 发出的 CRI 接口 指令,翻译成 Docker 引擎能听懂的 Docker API,从而让 K8s 能够继续指挥 Docker 干活。

 

K8s 的编排中枢是 CRI(容器运行时接口)。K8s 的  kubelet  组件只认 CRI 接口

在目前主流的 K8s 架构中(使用 containerd 作为运行时),根本不需要 cri-dockerd ,它们是这样完美配合的:
1. K8s 通过 CRI 接口 调用 containerd 。
2. containerd 本身既支持 CRI 接口,又遵循 OCI 规范。
3. containerd 再调用底层的 runc 。
4. runc 严格按照 OCI 运行时规范,调用 Linux 内核接口(如 namespace、cgroup)来真正启动容器。

总结来说:
K8s 确实只支持 CRI 接口。但 OCI 是底层运行容器的基础标准,不需要被“转换”成 CRI。 cri-dockerd  仅仅是因为 Docker 引擎不原生支持 CRI 接口,而被迫引入的一个“翻译官”桥梁。如果直接使用  containerd  或  CRI-O ,它们天生就同时兼容 CRI 和 OCI,整个链路会非常顺畅。

CRI-O、Containerd、Docker、Podman 都是容器生态里的工具,但它们分工不同:
● 如果您要在 Kubernetes 生产环境跑容器,主流选择是 Containerd 或 CRI-O。
● 如果您在本地写代码、构建镜像,主流选择是 Docker 或 Podman。

*Tesla* | 园豆:1762 (小虾三级) | 2026-06-09 07:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册