【容器】Containerd产生及和Docker对比

目录

背景

Docker介绍

Containerd介绍

常用命令对比


自 Kubernetes v1.24 起,Dockershim 已被删除,k8s将Containerd作为其容器运行时,那此次变化对容器化有何影响呢,本文进行简单介绍

背景

在 Kubernetes 早期,只支持一种容器运行时。这个运行时就是 Docker 引擎。当时,并没有太多其他选择,而且 Docker 是使用容器的主要工具。随着技术发展,k8s添加更多容器运行时,例如 rkt 和 hypernetes,很明显 Kubernetes 希望用户选择最适合他们的运行时。因此,Kubernetes 需要一种方法来允许集群操作员灵活地选择容器运行时。

容器运行时接口(CRI) 的发布就是为了实现这种灵活性。但是CRI 带来了一个问题:Docker Engine 作为容器运行时的使用早于 CRI,并且 Docker Engine 与 CRI 不兼容。为了解决这个问题,引入了一个小型软件 shim (dockershim) 作为 kubelet 组件的一部分,专门填补 Docker Engine 和 CRI 之间的空白,允许集群运营商继续使用 Docker Engine 作为其容器运行时。

k8s认为维护特定供应商的代码不符合开源理念。而Containerd是CNCF毕业的项目,所以在 Kubernetes v1.20 的发布,dockershim正式弃用了。

但是这并不意味着 Docker 的消亡,我们还能使用 Docker 作为开发工具。Docker 仍然是构建容器的有用工具,运行后生成的镜像docker build仍然可以在 Kubernetes 集群中运行。

Docker 生成的镜像并不是真正特定于 Docker 的镜像,而是 OCI(开放容器计划)镜像。任何符合 OCI 标准的镜像,无论使用什么工具来构建它,对于 Kubernetes 来说都是一样的。containerd和 CRI-O都知道如何提取这些镜像并运行它们。

注意:如果依赖底层 docker socket ( /var/run/docker.sock) 作为集群内工作流程的一部分,那么无法迁移到不同的运行时。这种模式通常被称为 Docker 中的 Docker。

Docker介绍

Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使能够将应用程序与基础设施分离,以便可以快速交付软件。借助 Docker,可以像管理应用程序一样管理基础设施。通过利用 Docker 的方法来传送、测试和部署代码,可以显着减少编写代码和在生产中运行代码之间的延迟。Docker Engine 已经使用 Containerd 进行容器生命周期管理,包括创建、启动和停止容器。

很久之前,大家一般把容器都认为是Docker。

Containerd介绍

Containerd 是一个行业标准的容器运行时,强调简单性、稳健性和可移植性。它可作为 Linux 和 Windows 的守护进程,可以管理其主机系统的完整容器生命周期:图像传输和存储、容器执行和监督、低级存储和网络附件等。它是一个低级构建块,旨在集成到其他系统中,例如 Docker 和 Kubernetes。

常用命令对比

如果使用Containerd,我们建议使用crictl命令

命令

Docker

Containerd

docker

crictl

ctr

查看容器列表

docker ps

crictl ps

ctr -n k8s.io c ls

查看容器详情

docker inspect

crictl inspect

ctr -n k8s.io c info

查看容器日志

docker logs

crictl logs

容器内执行命令

docker exec

crictl exec

挂载容器

docker attach

crictl attach

显示容器资源使用情况

docker stats

crictl stats

创建容器

docker create

crictl create

ctr -n k8s.io c create

启动容器

docker start

crictl start

ctr -n k8s.io run

停止容器

docker stop

crictl stop

删除容器

docker rm

crictl rm

ctr -n k8s.io c del

查看镜像列表

docker images

crictl images

ctr -n k8s.io i ls

查看镜像详情

docker inspect

crictl inspecti

拉取镜像

docker pull

crictl pull

ctr -n k8s.io i pull

推送镜像

docker push

ctr -n k8s.io i push

删除镜像

docker rmi

crictl rmi

ctr -n k8s.io i rm

查看Pod列表

crictl pods

查看Pod详情

crictl inspectp

启动Pod

crictl runp

停止Pod

crictl stop

你可能感兴趣的:(docker,容器)