Docker、containerd、CRI-O 和 runc 之间的区别

news2024/9/24 11:24:26

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器

您可以使用 Docker 或一堆Docker 的其他工具来运行容器。docker只是众多选项之一,Docker(公司)在生态系统中创建了一些很棒的工具,但不是全部。

容器方面有两大标准:

  • 开放容器计划(OCI):一组容器标准,描述镜像格式、运行时和分发。
  • Kubernetes中的容器运行时接口(CRI)允许您在 Kubernetes 中使用不同容器运行时的 API。

Docker 堆栈的工作原理

  Docker Engine 附带一系列工具,让开发人员或系统管理员可以轻松构建和运行容器。它基本上 是一个用于处理容器的命令行界面 (CLI)。

因此,实际上,当您使用 运行容器时docker,您实际上是通过 Docker 守护进程运行它,它会调用 containerd,然后使用 runc。

docker命令只是拼图的一小部分。它实际上调用一些较低级别的工具来完成繁重的工作:

Docker 堆栈中的低级工具有哪些?

ddocker从下往上,这些是用于运行容器的工具:

  • 最低级别 🔩低级容器运行时。runc 是一个低级容器运行时。它使用 Linux 的原生功能来创建和运行容器。它遵循 OCI 标准,并包含libcontainer,这是一个用于创建容器的 Go 库。
  • 🔧高级容器运行时。containerd 位于低级运行时之上,并添加了许多功能,例如传输图像、存储和网络。它还完全支持 OCI 规范。
  • 👺 Docker 守护进程。dockerd 是一个守护进程(在后台运行的长时间运行的进程),它提供标准 API,并与容器运行时进行通信
  • 最高级别 👩‍💻 Docker CLI 工具。最后,docker-cli让您能够使用命令与 Docker 守护程序进行交互docker ...。这样您就可以控制容器,而无需了解较低级别。

Kubernetes 使用 Docker 吗?

一个非常常见的问题是“容器如何在 Kubernetes 中运行?”。Kubernetes 使用 Docker 吗?嗯,现在它不再使用 Docker 了——但以前是使用 Docker 的。

最初,Kubernetes 使用 Docker(Docker Engine)来运行容器。

但随着时间的推移,Kubernetes 逐渐演变成一个与容器无关的平台。Kubernetes中创建了容器运行时接口 (CRI) API,允许将不同的容器运行时插入其中。

Docker Engine 是一个比 Kubernetes 更老的项目,它没有实现 CRI。因此,为了帮助过渡,Kubernetes 项目包含了一个名为dockershim的组件,它允许 Kubernetes 使用 Docker 运行时运行容器。

它弥合了新旧世界之间的差距。

垫片(shim)的消亡

但从 Kubernetes 1.24 开始,dockershim 组件被彻底移除,Kubernetes 不再支持 Docker 作为容器运行时,你需要选择实现了 CRI 的容器运行时。

Kubernetes 集群中 Docker Engine 的逻辑继任者是...... containerd。(如果你答对了,可以得 10 分!)或者你也可以使用其他运行时,比如CRI-O。

这并不意味着 Kubernetes 无法运行所谓的 Docker 格式的容器。containerdCRI -O 都可以在 Kubernetes 中运行 Docker 格式和 OCI 格式的镜像;它们无需使用命令docker或 Docker 守护进程即可完成此操作。

开放容器计划 (OCI) 规范

OCI是首批为容器世界制定标准的组织之一。它由 Docker 和其他公司于 2015 年成立。

OCI 得到了众多科技公司的支持,并维护着容器镜像格式以及容器运行方式的规范。

例如:您可能对 Linux 主机使用一个符合 OCI 标准的运行时,但对 Windows 主机使用不同的运行时。

Kubernetes 容器运行时接口

我们需要讨论的另一个标准是容器运行时接口(CRI)。这是由 Kubernetes 项目创建的 API。

CRI 是 Kubernetes 用于控制创建和管理容器的不同运行时的接口。

因此,如果您更喜欢使用containerd在 Kubernetes 中运行容器,那么您可以这样做!或者,如果您更喜欢使用CRI-O,那么也可以。这是因为这两个运行时都实现了 CRI 规范。

但是,如果您付费从供应商处获得支持(安全性、错误修复等),那么您选择的容器运行时可能会为您做出选择。例如,Red Hat 的OpenShift 使用CRI-O,并为其提供支持。Docker 为他们自己的containerd提供支持。

containerd 和 CRI-O

我们已经看到 Docker Engine 调用了一堆底层工具。但这些工具是什么?它们如何组合在一起?

第一层是高级运行时:由 Docker 创建的containerd和由 Red Hat 创建的CRI-O 。

容器

  containerd是源自 Docker 的高级容器运行时。它实现了 CRI 规范。它从注册表中提取镜像,对其进行管理,然后将其移交给较低级别​​的运行时,后者使用 Linux 内核的功能来创建我们称为“容器”的进程。

克里欧

  CRI-O是另一个实现 Kubernetes 容器运行时接口 (CRI) 的高级容器运行时。它是 containerd 的替代品。它从注册表中提取容器映像,在磁盘上管理它们,并启动较低级别的运行时来运行容器进程。

是的,CRI-O 是另一个容器运行时。它诞生于 Red Hat、IBM、Intel 和 SUSE。

runc 和其他低级运行时

    r unc是一个兼容 OCI 的容器运行时,它实现了 OCI 规范并运行容器进程。

runc有时被称为 OCI 的“参考实现”。

其他低级运行时

   但是,runc 并不是唯一的低级运行时。OCI 规范允许其他工具以不同的方式实现相同的功能:

  • crun 是一个用C编写的容器运行时(相比之下,runc 是用 Go 编写的。)
  • AWS 的firecracker-containerd,它将 OCI 规范作为单独的轻量级虚拟机实现(它也与支持 AWS Lambda 的技术相同)
  • Google 的gVisor可以创建具有自己内核的容器。它在其运行时中实现了 OCI,称为runsc

概括

    有一套开放标准,理论上可以更轻松地更换不同的实现。containerd 、runcCRI -O等项目实现了这些标准的部分内容。

在 Kubernetes 中,你可以选择要使用的容器运行时,只要它支持 CRI API 即可。你可以使用containerdCRI-O

最后,这个故事的寓意是:

在 k8s 1.24 版本之后,docker/dockershim 已被弃用,即容器无法通过 docker 命令管理,
但您可以使用支持 CRI(K8s 原生 API)的其他容器运行时,
通过使用 crictl 命令(或其他支持的命令)来管理容器/pod,而不是 docker 命令。

通过 crictl 映射 docker cli :https://medium.com/@vineetcic/mapping-from-dockercli-to-crictl-life-after-docker-is-cri-a39ea5649d6c

享受!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十三章 驱动模块传参

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一:ppt把当前页输出为图片:内容二:ppt导出图片模糊的解决方法:方法:步骤1:打开注册表编辑器步骤2:修改注册表: 该文…

使用jacob文字生成语音文件时遇到的问题及解决方案

使用jacob文字生成语音文件时 出现如下错误 java.lang.UnsatisfiedLinkError: no jacob-1.18-x64 in java.library.path错误表明Java虚拟机无法在其指定的java.library.path路径中找到名为jacob-1.18-x64的本地库文件。这个错误通常发生在尝试通过JNI或者JNA调用本地库时&…

算法学习笔记(Hello算法)—— 初识算法

1、相关链接 Hello算法:Hello 算法 (hello-algo.com) 2、算法是什么 2.1 算法定义 算法是一系列明确、有限且有效的步骤或指令的集合,用于解决特定问题或执行特定任务。 算法具有以下基本特征: 输入:算法至少有一个输入&…

【python】PyQt5中QAbstractButton基类的特性详细分析与实战应用

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

聚水潭·奇门对接打通金蝶云星空订单查询接口与销售退货新增接口

聚水潭奇门对接打通金蝶云星空订单查询接口与销售退货新增接口 对接源平台:聚水潭奇门 聚水潭SaaSERP于2014年4月上线,目前累计超过2.5万商家注册使用,成为淘宝应用服务市场ERP类目商家数和商家月订单增速最快的ERP。2014年及2015年“双十一”当天&#…

TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO

本教程将完成一个全面的UDP运行流程与GPSDO测试,从下载项目的源代码开始,通过编译过程,最终将项目部署到目标板卡上运行演示。此外,我们还介绍如何修改板卡的IP地址,以便更好地适应您的网络环境或项目需求。 首先从Gi…

【Java】:洗牌功能和杨辉三角的实现

洗牌 此操作包含的基本功能有: 组牌:组建 52 张扑克牌 四种花色:“♥️”,“♠️”,“⬛️”,“♣️”每种花色 13 张牌:1~13 洗牌:将 52 张扑克牌打乱顺序发牌:给三个人…

MybatisPlus设置动态表名

对于一些数据量比较大的表,为了提高查询性能,我们一般将表拆分成多张表,常见的是根据数据量,按年分表或者按月分表;分表虽然太高了查询性能,但是在查询的时候,如何才能查询执行分表数据呢&#…

谷粒商城实战笔记-45-商品服务-API-三级分类-查询-递归树形结构数据获取

文章目录 一,准备工作1,启动虚拟机2,启动mysql3,执行MySQL脚本插入分类数据4,关于三级分类 二,Controller层新增接口三,Service层新增接口1,代码实现2,测试 从这一节开始…

海康威视综合安防管理平台 detection 前台RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

Stateflow中的状态转换表

状态转换表是表达顺序模态逻辑的另一种方式。不要在Stateflow图表中以图形方式绘制状态和转换,而是使用状态转换表以表格格式表示模态逻辑。 使用状态转换表的好处包括: 易于对类列车状态机进行建模,其中模态逻辑涉及从一个状态到其邻居的转换…

【Axure高保真原型】批量增加标签——中继器版

今天和大家分享批量增加标签——中继器版的原型模板,效果包括: 添加标签:在输入框了输入需要添加的标签信息,点击添加标签按钮或者按键盘回车键可以动态添加该标签 批量添加:可以一次性添加多个标签,在输入…

15现代循环神经网络—GRU与LSTM

目录 1.门控循环单元 GRU关注一个序列门候选隐状态(candidate hidden state)隐状态总结从零开始代码实现代码简洁实现2.长短期记忆网络 LSTM门候选记忆单元(candidate memory cell)记忆单元隐状态代码1.门控循环单元 GRU GRU 是最近几年提出来的,在 LSTM 之后,是一个稍微简…

FastAPI(六十六)实战开发《在线课程学习系统》接口开发--用户注册接口开发

源码见"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 在前面我们分析了接口的设计,那么我们接下来做接口的开发。 首先,我们先设计下pydantic用户参数的校验: """…

2024-07-20 Unity插件 Odin Serializer2 —— 序列化教程

文章目录 1 由根对象决定序列化2 实现 Odin 序列化器2.1 继承已有序列化类2.2 自定义序列化类 3 避免 Unity 无限深度警告4 指定序列化秘钥4.1 External String Reference Resolver4.2 External GUID Reference Resolver4.3 External Index Reference Resolver 4 功能与限制4.1…

物联网在电力行业的应用

作者主页: 知孤云出岫 这里写目录标题 作者主页:物联网在电力行业的应用简介主要应用领域代码案例分析1. 智能电表数据采集和分析2. 设备监控和预测性维护3. 能耗管理和优化4. 电力负载预测5. 分布式能源管理6. 电动汽车充电管理7. 电网安全与故障检测 物联网在电力行业的应用…

vue3-video-play 导入 以及解决报错

npm install vue3-video-play --save # 或者 yarn add vue3-video-play import Vue3VideoPlay from vue3-video-play; import vue3-video-play/dist/style.css; app.use(Vue3VideoPlay) <template><div id"main-container-part"><div class"al…

基于Qt的上位机通用框架

0.前言 最近一年多的时间一直在开发设备控制相关的软件&#xff0c;加上之前在聚光的两年时间&#xff0c;前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架&#xff0c;核心思想类似于C#的依赖注入&#xff0c;对象的初始化都…

【启明智显分享】甲醛检测仪HMI方案:ESP32-S3方案4.3寸触摸串口屏,RS485、WIFI/蓝牙可选

今年&#xff0c;“串串房”一词频繁引发广大网友关注。“串串房”&#xff0c;也被称为“陷阱房”“贩子房”——炒房客以低价收购旧房子或者毛坯房&#xff0c;用极度节省成本的方式对房子进行装修&#xff0c;之后作为精修房高价租售&#xff0c;因甲醛等有害物质含量极高&a…