Containerd容器运行时将会替换Docker?
文章目录
- 一、什么是Containerd?
- 二、Containerd有哪些功能?
- 三、Containerd与Docker的区别
- 四、Containerd是否会替换Docker?
- 五、Containerd安装、部署和使用
公众号: MCNU云原生,欢迎微信搜索关注,更多干货,及时掌握。
我一直听到网络上在说Containerd会替换掉Docker,对于Containerd和Docker的关系似乎很多人没搞清楚,本文主要厘清两者的关系,尝试使用Containerd。
一、什么是Containerd?
Containerd是一个开源的容器运行时,由Docker公司于2017年捐赠给了Cloud Native Computing Foundation (CNCF),成为CNCF的顶级项目之一。它提供了一个稳定、可移植的基础架构来管理容器的生命周期,包括镜像管理、容器执行和存储管理等功能。
Containerd以一个守护进程的形式存在,使用runc或者其他符合OCI标注标准的运行时进行容器管理。
二、Containerd有哪些功能?
- 镜像管理:Containerd支持各种容器镜像格式,包括OCI(Open Container Initiative)规范中的镜像格式。它提供了镜像拉取、推送、删除等功能,支持私有和公共镜像仓库,并且可以与Docker Registry进行兼容。
- 容器执行:Containerd提供了高效、稳定的容器执行环境,支持OCI规范中的容器配置、生命周期管理、文件系统隔离、网络隔离等功能。
- 存储管理:Containerd提供了多种存储后端,包括本地磁盘、网络存储、分布式存储等,支持快照、复制、迁移等功能,可以满足不同场景下的存储需求。
- 扩展性:Containerd支持插件式架构,可以方便地扩展功能。例如,Containerd可以通过插件支持CRI(Container Runtime Interface)规范,使得Kubernetes可以使用Containerd作为容器运行时。
- 安全性:Containerd遵循最小特权原则,使得容器运行在最小的权限环境下,减少了攻击面。同时,Containerd支持seccomp和AppArmor等安全机制,可以增强容器的安全性。
三、Containerd与Docker的区别
Containerd与Docker都是容器技术的重要组成部分,来看看他们有哪些差异:
-
架构:Docker是一个完整的容器平台,包括镜像仓库、构建工具、管理工具等,而Containerd是一个轻量级的容器运行时,只负责容器的生命周期管理。
-
社区:Docker是一个独立的开源项目,拥有庞大的社区和生态系统,而Containerd是一个CNCF项目,社区相对较小,但是与CNCF的其他项目有良好的协作。
-
功能:Docker提供了更多的高级功能,如Swarm集群管理、Docker Compose应用编排等,而Containerd专注于容器的生命周期管理,不包括这些高级功能。
-
兼容性:Docker和Containerd都支持OCI规范的容器和镜像格式,但是Docker在镜像格式方面有自己的扩展,导致Docker和Containerd在某些细节上不兼容。另外,Docker提供了更多的CLI命令和API接口,而Containerd则更注重与其他组件的整合。
-
性能:Containerd的架构更加简单,因此比Docker更轻量级,启动和运行速度更快。
四、Containerd是否会替换Docker?
虽然Containerd与Docker之间存在差异,但是它们并不是互相排斥的关系。事实上,Docker可以使用Containerd作为后端来管理容器生命周期,而Containerd也可以使用Docker镜像格式和API进行兼容。下图很好地说明了Containerd和Docker之间的关系:
Containerd只是docker的一个容器运行时。网络上之所以一直都有"docker不行了"的言论,是因为kuberntes弃用了dockershim,采用了CRI(Container Runtime Interface)即容器运行时接口,而Kubernetes目前已经成为云原生领域容器编排事实上的标准。随着容器技术的不断发展,Containerd在轻量化、安全性、可移植性等方面的优势越来越明显,未来有可能成为最广泛的容器运行时选择。
所以说Containerd不适合和Docker进行比较,因为不是完全同个层面的东西。Containerd应该与CRI-O进行比较(下一期专门讲一下这两个容器进行时的比较。)
五、Containerd安装、部署和使用
-
安装依赖软件包
Containerd需要依赖cgroup、systemd和iptables等软件包,可以使用以下命令进行安装:sudo apt-get update sudo apt-get install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release
-
添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
添加Docker官方APT源
根据操作系统版本添加以下APT源:# Ubuntu 20.04 (Focal) echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# Ubuntu 18.04 (Bionic) echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu bionic stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# Ubuntu 16.04 (Xenial) echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu xenial stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
安装Containerd
使用以下命令安装Containerd:sudo apt-get update sudo apt-get install -y containerd.io
-
配置Containerd
在配置文件/etc/containerd/config.toml
中添加以下内容:[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]...[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true
-
重新加载Containerd配置并启动服务
使用以下命令重新加载配置文件并启动Containerd服务:sudo systemctl daemon-reload sudo systemctl restart containerd
-
验证Containerd安装是否成功
运行以下命令验证Containerd是否已成功安装:sudo ctr version
输出应为:
codeClient:Version: 1.5.5Revision: 09a19cb71a40ac5ab8686245e5a5fb5e5d25c144...Server:Version: 1.5.5Revision: 09a19cb71a40ac5ab8686245e5a5fb5e5d25c144...
以上就是在Linux系统中安装和部署Containerd的步骤,在安装和部署完成后,可以使用CLI命令或者API接口来管理容器和镜像,例如:
# 拉取一个镜像
containerd ctr image pull docker.io/library/nginx:latest# 创建并启动一个容器
containerd ctr run --rm docker.io/library/nginx:latest mynginx# 停止并删除一个容器
containerd ctr stop mynginx
containerd ctr container rm mynginx
Containerd还提供了CRI插件,可以用于Kubernetes集群中的容器运行时。在Kubernetes中使用Containerd作为容器运行时的安装和配置可以参考:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd
相关文章:

Containerd容器运行时将会替换Docker?
文章目录一、什么是Containerd?二、Containerd有哪些功能?三、Containerd与Docker的区别四、Containerd是否会替换Docker?五、Containerd安装、部署和使用公众号: MCNU云原生,欢迎微信搜索关注,更多干货&am…...

java虚拟机中对象创建过程
java虚拟机中对象创建过程 我们平常创建一个对象,仅仅只是使用new关键字new一个对象,这样一个对象就被创建了,但是在我们使用new关键字创建对象的时候,在java虚拟机中一个对象是如何从无到有被创建的呢,我们接下来就来…...
3485. 最大异或和
Powered by:NEFU AB-IN Link 文章目录3485. 最大异或和题意思路代码3485. 最大异或和 题意 给定一个非负整数数列 a,初始长度为 N。 请在所有长度不超过 M的连续子数组中,找出子数组异或和的最大值。 子数组的异或和即为子数组中所有元素按位异或得到的…...

SpringBoot:SpringBoot配置文件.properties、.yml 和 .ymal(2)
SpringBoot配置文件1. 配置文件格式1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 三种配置文件优先级和区别2. yaml格式2.1 语法规则2.2 yaml书写2.2.1 字面量:单个的、不可拆分的值2.2.2 数组:一组按…...
QT 学习之QPA
QT 为实现支持多平台,实现如下类虚函数 Class Overview QPlatformIntegration QAbstractEventDispatcherQPlatformAccessibilityQPlatformBackingStoreQPlatformClipboardQPlatformCursorQPlatformDragQPlatformFontDatabaseQPlatformGraphicsBufferQPlatformInput…...
Pytorch中FLOPs和Params计算
文章目录一. 含义二. 使用thop库计算FLOPs和Params三. 注意四. 相关链接一. 含义 FLOPs(计算量):注意s小写,是floating point operations的缩写(这里的小s则表示复数),表示浮点运算数ÿ…...

DP1621国产LCD驱动芯片兼容替代HT1621B
目录DP1621简介DP1621芯片特性DP1621简介 DP1621是点阵式存储映射的LCD驱动器芯片,可支持最大128点(32SEG * 4COM)的 LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显示数据,也可通过指…...
Linux 用户管理
用户管理 useradd新增用户 格式:useradd [参数] 用户名称 常用参数: -c comment 指定一段注释性描述。 -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。 -g 用户组 指定用户所属的用户组…...
前端vue面试题(持续更新中)
vue-router中如何保护路由 分析 路由保护在应用开发过程中非常重要,几乎每个应用都要做各种路由权限管理,因此相当考察使用者基本功。 体验 全局守卫: const router createRouter({ ... }) router.beforeEach((to, from) > {// .…...
Java查漏补缺-从入门到精通汇总
Java查漏补缺(01)计算机的硬件与软件、软件相关介绍、计算机编程语言、Java语言概述、Java开发环境搭建、Java开发工具、注释、API文档、JVM Java查漏补缺(02)关键字、标识符、变量、基本数据类型介绍、基本数据类型变量间运算规…...

软件测试2年半的我,谈谈自己的理解...
软件测试两年半的我,谈谈自己的理解从2020年7月毕业,就成为一名测试仔。日子混了一鲲年,感觉需要好好梳理一下自己的职业道路了,回顾与总结下吧。一、测试的定位做事嘛,搞清楚自己的定位很重要。要搞清楚自己的定位&am…...
什么是SAS硬盘
什么是SAS硬盘SAS是新一代的SCSI技术,和Serial ATA(SATA)硬盘都是采用串行技术,以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口。此接口的设计是为了改善存储系统的效能、可用性和扩充性&…...

一文理解服务端渲染SSR的原理,附实战基于vite和webpack打造React和Vue的SSR开发环境
SSR和CSR 首先,我们先要了解什么是SSR和CSR,SSR是服务端渲染,CSR是客户端渲染,服务端渲染是指 HTTP 服务器直接根据用户的请求,获取数据,生成完整的 HTML 页面返回给客户端(浏览器)展…...

Matlab 实用小函数汇总
文章目录Part.I 元胞相关Chap.I 创建空 char 型元胞Part.II 矩阵相关Chap.I 矩阵插入元素Part.III 字符串相关Chap.I 获取一个文件夹下所有文件的文件名的部分内容Part.IV 结构体相关Chap.I 读取结构体Chap.II 取结构体中某一字段的所有值本篇博文记录一些笔者使用 Matlab 时&a…...

Echarts 仪表盘倾斜一定角度显示,非中间对称
第024个点击查看专栏目录大多数的情况下,制作的仪表盘都是中规中矩,横向中间对称,但是生活中的汽车,摩托车等仪表盘确是要倾斜一定角度的,Echarts中我们就模拟一个带有倾斜角度的仪表盘。核心代码见示例源代码 文章目录…...

Vue中如何利用websocket实现实时通讯
首先我们可以先做一个简单的例子来学习一下简单的websocket模拟聊天对话的功能 原理很简单,有点像VUE中的EventBus,用emit和on传来传去 首先我们可以先去自己去用node搭建一个本地服务器 步骤如下 1.新建一个app.js,然后创建pagejson.js文…...
力扣解法汇总1144. 递减元素使数组呈锯齿状
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的…...

Spring彻头彻尾的讲解,按照Spring框架启动流程,逐步剖析问题,不再是大杂烩!
文章目录1. 定义Spring Bean篇1.1 定义Spring Bean的几种方式1.1.1 XML文件定义Spring Bean1.1.2 JavaConfig定义Spring Bean1.1.3 Component注解定义SpringBean1.2 装配Spring Bean的四种常用方式1.2.1 手动装配 XML文件1.2.2 自动装配 XML文件1.2.3 手动装配 JavaConfig文…...

[2]MyBatis+Spring+SpringMVC+SSM整合一套通关
二、Spring 1、Spring简介 1.1、Spring概述 官网地址:https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Jav…...

Javascript的API基本内容(三)
一、事件流 假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段简单来说:捕获阶段是 从父到子 冒泡阶段是从子到父实际工作都是使用事件冒泡为主 二、页面加载事件 加载外部资源(如图片、外联CS…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...