Containerd和Docker的关系
联系
容器运行时(Container Runtime)是Kubernetes(k8s)最重要的组件之一,负责管理镜像和容器的生命周期。Kubelet通过Container Runtime Interface (CRI) 与容器运行时交互,以管理镜像和容器。
Containerd调用链更短,组件更少,更稳定,占用节点资源更少。 建议选择containerd。
当您遇到以下情况时,请选择docker作为运行时组件:
- 如需使用docker in docker。
- 如需在CCE节点使用docker build/push/save/load等命令。
- 如需调用docker API。
- 如需docker compose或docker swarm。
Containerd创建并启动的容器会被kubelet立即删除,不支持暂停、恢复、重启、重命名、等待容器,Containerd不具备docker构建、导入、导出、比较、推送、查找、打标签镜像的能力,Containerd不支持拷贝文件,可通过修改containerd的配置文件实现登录镜像仓库。
Containerd和Docker组件常用命令
Containerd不支持dockerAPI和dockerCLI,但是可以通过cri-tool命令实现类似的功能。
镜像相关功能
容器相关功能
POD相关功能
调用链区别
Docker作为k8s容器运行时,调用关系如下:
kubelet --> docker shim (在 kubelet 进程中) --> dockerd --> containerd
Containerd作为k8s容器运行时,调用关系如下:
kubelet --> cri plugin(在 containerd 进程中) --> containerd
其中dockerd虽增加了swarm cluster、docker build、docker API等功能,但也会引入一些bug,而与containerd相比,多了一层调用。