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

容器与 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.rhkb.cn/news/383365.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

47.简易电压表的设计与验证(2)

(1)Verilog 代码: module adc_collect(input clk ,input reset_n ,input [7:0] adc_data ,output clk_adc );wire clk_adc_a ;…

大文件分片上传(前端TS实现)

大文件分片上传 内容 一般情况下,前端上传文件就是new FormData,然后把文件 append 进去,然后post发送给后端就完事了,但是文件越大,上传的文件也就越长,如果在上传过程中,突然网络故障,又或者…

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

【ROS2】高级:安全-理解安全密钥库

目标:探索位于 ROS 2 安全密钥库中的文件。 教程级别:高级 时间:15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验! 背景 在继续之前,请确保您已完成设置安全教程。 sros2 包可以用来创…

Qt自定义下拉列表-可为选项设置标题、可禁用选项

在Qt中,ComboBox(组合框)是一种常用的用户界面控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个。在项目开发中,如果简单的QComboBox无法满足需求,可以通过自定义QComboBox来实现更复杂的功能。本文介绍一个自定义的下…

Python研究生毕业设计,数据挖掘、情感分析、机器学习

最近在学校毕业了,其中有很多毕业论文使用到的代码,如数据挖掘、情感分析、机器学习、数据预测处理、划分数据集和测试集,绘制分类任务,词汇表示:使用TF-IDF向量化器,线性回归、多元线性回归、SVR回归模型&…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长,看源码的时候要见名知意&am…

grafana对接zabbix数据展示

目录 1、初始化、安装grafana 2、浏览器访问 3、安装zabbix 4、zabbix数据对接grafana 5、如何导入模板? ① 设置键值 ② 在zabbix web端完成自定义监控项 ③ garafana里添加nginx上面的的三个监控项 6、如何自定义监控项? 以下实验沿用上一篇z…

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

开发桌面程序-Electron入门

Electron是什么 来自官网的介绍 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 总…

普中51单片机:DS1302时钟芯片讲解与应用(十)

文章目录 引言基本特性什么是RAM?什么是涓流充电? 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片,具有低功耗、内置…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天,VMware ESXi以其卓越的性能和稳定性,成为了众多企业构建虚拟化环境的首选。然而,随着远程办公和跨…

《昇思25天学习打卡营第19天|基于MobileNetv2的垃圾分类》

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入,对图像中的垃圾物体进行检测,并且将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写(Python语言)&a…

机器学习 | 回归算法原理——多项式回归

Hi,大家好,我是半亩花海。接着上次的最速下降法(梯度下降法)继续更新《白话机器学习的数学》这本书的学习笔记,在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,…

html+css+js前端作业 王者荣耀官网5个页面带js

htmlcssjs前端作业 王者荣耀官网5个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89574989 目录1 目录2 目录3 项目视频 王者荣耀5个页面(带js) 页面1 页面2 页面3 页面4 页面5

分布式Apollo配置中心搭建实战

文章目录 环境要求第一步、软件下载第二步、创建数据库参考文档 最近新项目启动,采用Apollo作为分布式的配置中心,在本地搭建huanj 实现原理图如下所示。 环境要求 Java版本要求:JDK1.8 MySql版本要求:5.6.5 Apollo版本要求&…

机器学习(二十):偏差和方差问题

一、判断偏差和方差 以多项式回归为例,红点为训练集数据,绿点为交叉验证数据。 下图的模型,训练集误差大,交叉验证集误差大,这代表偏差很大 下图的模型,训练集误差小,交叉验证集误差小&#x…

SpringBoot上传超大文件导致OOM,完美问题解决办法

问题描述 报错: Caused by: java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) ~[?:1.8.0_381] at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117) ~[?:1.8.0_381] at java.…

Windows下载、安装、部署Redis服务的详细流程

本文介绍在Windows电脑中,下载、安装、部署并运行Redis数据库服务的方法。 Redis(Remote Dictionary Server)是一个开源、高性能的键值存储系统,最初由Salvatore Sanfilippo在2009年发布,并由Redis Labs维护。Redis因其…