• 【容器】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

  • 相关阅读:
    树状数组总结
    如何在页面中制作悬浮发布按钮弹窗
    分布式(二)-大型网站架构演化发展历程
    Jetty
    接口自动化测试框架搭建全部过程
    2022 年最新【Java 经典面试 800 题】面试必备,查漏补缺;多线程 +spring+JVM 调优 + 分布式 +redis+ 算法
    vue使用smooth-signature实现移动端电子签字,包括横竖屏
    【Redis】几款redis可视化工具(推荐Another Redis Desktop Manager)
    电影售票系统遇到的问题
    【MRTK】HoloLens 项目部署的几种方法
  • 原文地址:https://blog.csdn.net/qq_36464836/article/details/133910070