一文了解OCI标准、runC、docker、contianerd、CRI的关系

docker和contanerd都是流行的容器运行时(container runtime);想讲清楚他们两之间的关系,让我们先从runC和OCI规范说起。

一、OCI标准和runC

1、OCI(open container initiative)

OCI是容器标准化组织为了推进容器技术的发展,对容器标准进行的定义;方便业界按照统一的标准进行容器开发,在2015年由Docker公司牵头制定了容器标准;OCI目前包括了两个标准:runtime-spec和image-spec,分别定义了容器运行时标准和容器镜像标准。

2、runC

runC是基于OCI规范开发的一个轻量级的容器运行时,他是一个GO语言编写的轻量级工具;他用于在linux系统中管理容器的生命周期,包括容器的创建、删除、列出、杀死、删除,但是不包括镜像的管理。
runc也是docker、containerd内部实现容器管理的工具。

3、Low-Level和High-Level容器运行时

低级容器运行时和高级容器运行时是容器技术中的两种不同类型。

​ 低级容器运行时主要处理底层细节,利用Linux内核功能namespace和Cgroups来运行、创建容器。namespace可以让你为每个容器提供虚拟化系统资源,比如文件系统和网络,Cgroup提供了限制每个容器所能使用的资源,比如内存和CPU。它们负责创建和运行容器,但不处理像镜像构建、镜像管理、网络等高级运行时提供的功能。

​ 高级容器运行时则提供更多功能,如管理容器的生命周期、管理镜像、存储管理、网络管理。高级容器运行时将容器运行的实现交给了runc。

低级容器运行时可以通过OCI规范与高级容器运行时(如containerd)进行交互。高级容器运行时会提供一个config.json文件给低级运行时,然后由低级运行时创建容器。

二、docker与containerd

1、containerd

containerd是一个高级的容器运行时,他与runc不同,runc执行是一个命令行工具,而containerd可以在宿主机上管理完整的容器生命周期,包括镜像的传输与存储、容器的执行与管理存储、网络等;

containerd是从docker中分离出来的一个项目,他比docker更加轻量,摒弃了一些与容器编排冲突的功能,所以可以作为底层的容器运行时,他现在成了新版本kuberbetes默认的容器运行时,后面再详细说明为什么kubernetes会选择containerd作为容器运行时,下图为以containerd做为底层容器运行时的平台。
在这里插入图片描述

2、docker

1.docker概述

docker容器技术的颠覆者,通过轻量级容器化、简单操作命令的方式实现了应用打包和交付运行。

Docker Daemon整体架构采用C/S模式,主要有客户端和服务器两大部分组成。客户端负责发送命令,服务端负责接收命令。

2.Docker Daemon组件构成

下图包含了runC、containerd-shim、containerd、docker之间的层级关系

在这里插入图片描述

docker相关的组件

  • docker:docker命令,也就是docker客户端
  • dockerd:dockerd进程,一般都是后台运行,接收docker客户端发来的指令
  • docker-init:可以在启动的时候添加 --init参数,以docker-init作为1号进程,负责管理容器内的子进程
  • docker-proxy:主要作端口映射,底层依赖iptables实现

containerd相关组件

  • containerd:管理容器、镜像、存储、网络,后台是一个常驻进程,通过套接字接收dockerd发送的请求
  • containerd-shim:主要将真正的容器与containerd解耦,使用containerd-shim作为容器进程的父进程,从而实现重启containerd而不影响容器进程。
  • ctr:containerd的客户端工具

容器运行时相关组件

  • runc:unc 是一个标准的 OCI 容器运行时的实现,它是一个命令行工具,可以直接用来创建和运行容器。

三、CRI接口

1、CRI概述

Kubernetes为了实现可插拔设计,提供了三个接口,分别是容器网络接口CNI、容器运行时接口CRI、容器存储接口CSI,只要满足相应的接口信息,便可以接入到kubernetes中。

在kubernetes的1.5版本以前,k8s依赖docker,为了支持不同的容器运行时,也为了与docker解耦,便开放了CRI标准,方便kubernetes与其他容器运行时进行对接。

2、CRI支持后端

  1. cri-o
  2. docker
  3. cri-containerd
  4. rkt
  5. frakti

3、dockershim

在kubernetes提出CRI规范时,docker并不支持CRI标准,由于当时Docker在容器运行时领域是绝对权威的存在,kubernetes在kubelet中加入了docker-shim,用来对接docker与kubelet,使docker可以兼容。实际的链路是:

在这里插入图片描述

后来越来越多的容器运行时开始支持CRI接口,kubernetes在1.24版本的kubelet中正式删除了dockershim,改成了直接对接containerd(此版本已经支持CRI,containerd由docker公司开源),这种链路更加简洁,效率更高。

在这里插入图片描述

新版本的containerd已经将CRI-containerd集成到containerd中,整个链路更加简洁。

请添加图片描述

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

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

相关文章

利用动态规划优化10年投资回报:策略、证明与算法分析

利用动态规划优化10年投资回报:策略、证明与算法分析 a. 存在最优投资策略的证明b. 最优子结构性质的证明c. 最优投资策略规划算法设计d. 新限制条款下最优子结构性质的证明 在面对投资策略规划问题时,我们的目标是在10年后获得最大的回报。Amalgamated投…

Java上传文件到服务器

1、使用jsch <!--sftp文件上传--><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency> 2、配置类 package com.base.jsch;import lombok.Data; import o…

数据结构与算法-哈希表

哈希表 哈希表&#xff08;hash table&#xff09;&#xff0c;又称散列表&#xff0c;它通过建立键 key 与值 value 之间的映射&#xff0c;实现高效的元素查询。具体而言&#xff0c;我们向哈希表中输入一个键 key &#xff0c;则可以在 时间内获取对应的值 value 。 1.基础…

牛客 NC205 跳跃游戏(三)【中等 贪心 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/14abdfaf0ec4419cbc722decc709938b 思路 参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** …

搜维尔科技:Manus Xsens Metagloves新一代手指捕捉

Manus Xsens Metagloves新一代手指捕捉 搜维尔科技&#xff1a;Manus Xsens Metagloves新一代手指捕捉

Go 单元测试之Mysql数据库集成测试

文章目录 一、 sqlmock介绍二、安装三、基本用法四、一个小案例五、Gorm 初始化注意点 一、 sqlmock介绍 sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作&#xff0c;并且可以验证 SQL 语句的执行情况&#xff0c;非常适合用于单元测试…

基于SpringBoot+Vue社区医院服务平台(源码+文档+包运行)

一.系统概述 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了社区医院信息平台的开发全过程。通过分析社区医院信息平台管理的不足&#xff0c;创建了一个计算机管理社区医院信息平台的方案。文章介绍了社区医院信息…

如何在Linux CentOS部署宝塔面板并实现固定公网地址访问内网宝塔

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

QAnything部署Mac m1环境

本次安装时Qanything已经更新到了v1.3.3&#xff0c;支持纯python安装。安装过程比较简单&#xff0c;如下&#xff1a; QAnything/README_zh.md at qanything-python-v1.3.1 netease-youdao/QAnything GitHub 首先需要用Anaconda3创建隔离环境&#xff0c;简要说明下Anaco…

春藤实业启动SAP S/4HANA Cloud Public Edition项目,与工博科技携手数字化转型之路

3月11日&#xff0c;广东省春藤实业有限公司&#xff08;以下简称“春藤实业”&#xff09;SAP S/4HANA Cloud Public Edition&#xff08;以下简称“SAP ERP公有云”&#xff09;项目正式启动。春藤实业董事长陈董、联络协调项目经理慕总、内部推行项目经理陈总以及工博董事长…

SQLAlchemy批量更新

在 SQLAlchemy 1.4 版本中&#xff0c;批量更新仍然是一个常见的需求。虽然 SQLAlchemy 1.4 引入了一些新功能和改进&#xff0c;但基本的批量更新策略与之前的版本相似。以下是一些在 SQLAlchemy 1.4 中执行批量更新的常见方法&#xff1a; 1. 使用 update() 语句 你可以使用…

酒店水电能源计量管理系统

酒店水电能源计量管理系统是一种针对酒店行业设计的能源管理系统&#xff0c;旨在实现对水电能源的计量、监测和管理。本文将从系统特点、构成以及带来的效益三个方面展开介绍。 系统特点 1.多元化计量&#xff1a;该系统能够对酒店内的水、电能源进行多元化计量&#xff0c;…

第3章 网络基础知识

aws入门篇 03.IP地址与CIDR_哔哩哔哩_bilibili 3.1 IP地址 相当于互联网上的门牌号码&#xff0c;分为ipv4/ipv6&#xff0c;ipv6就是为了解决ipv4的地址耗尽问题的。 v4是1个32位的地址空间192.168.0.1&#xff08;更应该看作是2进制&#xff09; v6是1个128位的地址空间 20…

软件项目总体测试计划(Word原件2024)

一、 前言 &#xff08;一&#xff09; 背景 &#xff08;二&#xff09; 目的 &#xff08;三&#xff09; 测试目标 &#xff08;四&#xff09; 适用范围与读者对象 &#xff08;五&#xff09; 术语与缩写 二、 软件测试实施流程 &#xff08;一&#xff09; 测试工作总体流…

Bash 脚本常用命令

一、基础命令 echo&#xff1a;输出内容到屏幕或文件。 示例&#xff1a;输出“Hello&#xff0c; World&#xff01;”到屏幕。 echo "Hello, World!"pwd&#xff1a;显示当前工作目录。 示例&#xff1a;查看当前目录路径。 pwdcd&#xff1a;改变当前工作目录…

华为OD-C卷-查找众数及中位数[100分]

题目描述 众数是指一组数据中出现次数量多的那个数&#xff0c;众数可以是多个。 中位数是指把一组数据从小到大排列&#xff0c;最中间的那个数&#xff0c;如果这组数据的个数是奇数&#xff0c;那最中间那个就是中位数&#xff0c;如果这组数据的个数为偶数&#xff0c;那…

2024年MathorCup数学建模C题物流网络分拣中心货量预测及人员排班解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 C题 物流网络分拣中心货量预测及人员排班 原题再现&#xff1a; 电商物流网络在订单履约中由多个环节组成&#xff0c;图1是一个简化的物流网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包按照不同流…

【Python基础】MySQL

文章目录 [toc]创建数据库创建数据表数据插入数据查询数据更新 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python基础 学习指南&#xff1a;Python学习指南 创建数据库 import pymysqldef create_database():db pymysql.connect(hostlocalhost, userroot, passwordr…

文心一言 vs GPT4 全面比较

文心一言和GPT4是两种不同的自然语言处理模型&#xff0c;它们在性能、应用场景和优缺点等方面存在一些差异。下面是它们的全面比较&#xff1a; 1. 性能&#xff1a; - 文心一言&#xff1a;文心一言是一种基于Transformer的中文语言模型&#xff0c;具有较好的语言理解和生成…

Maven多模块管理

Maven多模块管理 在了解怎么进行Maven多模块管理之前&#xff0c;先聊聊为什么要进行Maven多模块管理 为什么要Maven多模块管理&#xff1f; 在传统的单体架构开发下&#xff0c;一个项目中的依赖只需要使用一个pom.xml文件管理即可。但是随着微服务的流行&#xff0c;将原有…