当前位置: 首页 > news >正文

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

享受!!!

相关文章:

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

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一,Docker(公司)在生态系统中创建了一些很棒的工具,但不是全部。 容器方面有…...

PRISM-Python 中的规则一个简单的 Python 规则感应系统

欢迎来到雲闪世界.PRISM 是一种现有算法(尽管我确实创建了一个 Python 实现),PRISM 相对简单,但在机器学习中,有时最复杂的解决方案效果最好,有时最简单的解决方案效果最好。然而,当我们希望建立…...

DB-GPT:LLM应用的集大成者

整体架构 架构解读 可以看到,DB-GPT把架构抽象为7层,自下而上分别为: 运行环境:支持本地/云端&单机/分布式等部署方式。顺便一提,RAY是蚂蚁深度参与的一个开源项目,所以对RAY功能的支持应该非常完善。…...

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…...

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度(通常是 float32&#xff0…...

二、原型模式

文章目录 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 中…...

【目标检测】Anaconda+PyTorch(GPU)+PyCharm(Yolo5)配置

前言 本文主要介绍在windows系统上的Anaconda、PyTorch、PyCharm、Yolov5关键步骤安装,为使用yolo所需的环境配置完善。同时也算是记录下我的配置流程,为以后用到的时候能笔记查阅。 Anaconda 软件安装 Anaconda官网:https://www.anaconda…...

Django实战项目之进销存数据分析报表——第二天:项目创建和 PyCharm 配置

在上一篇博客中,我们讨论了如何搭建一个全栈 Web 应用的开发环境,包括 Python 环境的创建、Django 和 MySQL 的安装以及前端技术栈的选择。现在,让我们继续深入,学习如何在 PyCharm 中创建一个新的 Django 项目并进行配置。 一…...

静态路由实验

1.实验拓扑图 二、实验要求 1.R6为ISP,接口IP地址均为公有地址,该设备只能配置IP地址,之后不能再对其进行任何配置; 2.R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配; 3.R1、R2、R4&…...

VSCode STM32嵌入式开发插件记录

要卸载之前搭建的VSCode嵌入式开发环境了,记录一下用的插件。 1.Cortex-Debug https://github.com/Marus/cortex-debug 2.Embedded IDE https://github.com/github0null/eide 3.Keil uVision Assistant https://github.com/jacksonjim/keil-assistant/ 4.RTO…...

linux cpu 占用超100% 分析。

感谢: https://www.cnblogs.com/wolfstark/p/16450131.html 总结&#xff1a; 查看进程中各个线程占用百分比 top -H -p <pid> 某线程100%了 说明 任务处理不过来 会卡 但是永远不可能超100% 系统监视器里面看到的是 所有线程占用的 总和会超100%。 所以最好的情况是&…...

自然学习法和科学学习法

一、自然学习法 自然学习法&#xff1a;什么事自然学习法&#xff0c;特意让kimi来回答了一下。所谓的自然学习法说的俗一点就是野路子学习方法。这种学习方法的特点是“慢”“没有系统性”&#xff0c;学完之后感觉都会了&#xff0c;但是又感觉什么都不会。 二、科学学习法 …...

力扣第二十四题——两两交换链表中的节点

内容介绍 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff…...

C语言柔性数组详解

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 4.柔性数组的优势 1.柔性数组 C99 中&#xff0c;结构体中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做『柔性数组』成员。 例如&#xff1a; struct S {char c;int n;int arr[];//柔性数组 }; struct …...

自动驾驶---视觉Transformer的应用

1 背景 在过去的几年&#xff0c;随着自动驾驶技术的不断发展&#xff0c;神经网络逐渐进入人们的视野。Transformer的应用也越来越广泛&#xff0c;逐步走向自动驾驶技术的前沿。笔者也在博客《人工智能---什么是Transformer?》中大概介绍了Transformer的一些内容&#xff1a…...

预训练语言模型实践笔记

Roberta output_hidden_statesTrue和last_hidden_states和pooler_output 在使用像BERT或RoBERTa这样的transformer模型时&#xff0c;output_hidden_states和last_hidden_state是两个不同的概念。 output_hidden_states: 这是一个布尔值&#xff0c;决定了模型是否应该返回所…...

Perl 哈希

Perl 哈希 Perl 哈希是一种强大的数据结构&#xff0c;用于存储键值对集合。它是 Perl 语言的核心特性之一&#xff0c;广泛应用于各种编程任务中。本文将详细介绍 Perl 哈希的概念、用法和最佳实践。 什么是 Perl 哈希&#xff1f; Perl 哈希是一种关联数组&#xff0c;其中…...

Linux之Mysql索引和优化

一、MySQL 索引 索引作为一种数据结构,其用途是用于提升数据的检索效率。 1、索引分类 - 普通索引(INDEX):索引列值可重复 - 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL - 主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表只能有一个主键索引 - 全…...

springboot业务逻辑写在controller层吗

Spring Boot中的业务逻辑不应该直接写在Controller层。‌ 在Spring Boot项目中&#xff0c;‌通常将业务逻辑分为几个层次&#xff0c;‌包括Controller层、‌Service层、‌Mapper层和Entity层。‌ 1.其中&#xff0c;‌Controller层主要负责处理HTTP请求&#xff0c;‌通过注…...

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序&#xff0c;使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...