Docker和Containerd 功能对比


Kubernetes 对 Docker 的使用方式改变

  首先,要明确的是,Kubernetes 并没有完全放弃 Docker,而是改变了对 Docker 的使用方式。

  这一改变主要是因为 Kubernetes 1.20 版本宣布弃用 Docker 容器运行时的支持,Kubernetes 1.24 (2022.05)版本正式弃用Dockershim。

  这意味着,虽然在 Kubernetes 集群中可以运行用 Docker 构建的容器镜像,但 Kubernetes 将不再使用 Docker 作为容器运行时。

  这个改变背后的原因是 Docker 和 Kubernetes 之间的技术差异。

  Docker 是一个包含多种功能的大型应用,除了容器运行时之外,还包括图像管理、存储、网络等。而 Kubernetes 实际上只需要容器运行时这一部分功能。

  因此,为了减轻 Kubernetes 的负担,更高效地管理容器,Kubernetes 开始支持更加轻量级和标准化的容器运行时接口(CRI)。

Kuberetes 并没有淘汰 Docker

  这并不意味着 Docker 被淘汰,因为 Docker 构建的容器镜像仍然可以在 Kubernetes 中运行。

  只是 Kubernetes 会使用其他容器运行时(如 containerd 或 CRI-O)来直接运行这些镜像。

  Docker 镜像本身符合 OCI(Open Container Initiative)标准,因此可以被任何标准的容器运行时使用。

CRI-Docker

cri-docker 是 Container Runtime Interface (CRI) 的一个实现,专为 Docker 设计。CRI 是由 Kubernetes 引入的标准接口,用于与容器运行时进行通信。最初,Kubernetes 直接支持 Docker 作为默认的容器运行时,但随着 Kubernetes 的发展,为了支持更多的容器运行时(如 containerd、CRI-O 等),引入了 CRI。

Containerd

在 Kubernetes 1.24版本之后,containerd 作为默认容器运行时,负责管理各个节点上的容器。

Docker和Containerd 功能对比

镜像相关功能 Docker Containerd
显示本地镜像列表 docker images ctr -n k8s.io images ls
下载镜像 docker pull ctr -n k8s.io images pull -h
上传镜像 docker push ctr -n k8s.io images push -h
*删除本地镜像 docker rmi ctr -n k8s.io delete
查看镜像详情 docker inspect IMAGE-ID crictl inspecti IMAGE-ID
*导出离线镜像 docker save xxx > xxx.tar ctr -n k8s.io images export nginx-1.21.6.tar docker.io/library/nginx:1.21.6
*导入离线镜像 docker load -i xxx.tar ctr -n k8s.io images import xxx.tar
容器相关功能 Docker Containerd
显示容器列表 docker ps crictl ps
创建容器 docker create crictl create
启动容器 docker start crictl start
停止容器 docker stop crictl stop
删除容器 docker rm crictl rm
查看容器详情 docker inspect crictl inspect
attach docker attach crictl attach
exec docker exec crictl exec
logs docker logs crictl logs
stats docker stats crictl stats
POD 相关功能 Docker Containerd
显示 POD 列表 crictl pods
查看 POD 详情 crictl inspectp
运行 POD crictl runp
停止 POD crictl stopp