Docker和containerd之概览(Overview of Docker and Containerd)

Docker和containerd之概览

  • 容器本质上就是一个进程。

  • Namespace是一种逻辑分组机制,允许您将集群资源划分为独立的虚拟环境。每个 Namespace 为资源提供了一个范围,使得不同的团队、应用程序或环境可以在同一集群中共存,而不会相互干扰。

  • Cgroups(是control groups的简写)是Linux内核用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)的功能。

它是Google的工程师在2006年发起的一个项目,2008年通过 Namespace 实现资源(网络、文件、系统等)隔离,通过 Cgroups 实现资源(CPU、内存)限制,让我们使用起来就感觉像在操作虚拟机一样,但其和虚拟机本质上的区别,那就是容器和宿主机是共享同一个内核的 容器和宿主机是共享同一个内核的。为了将我们的应用进程运行在容器中,当然就需要有一些方便的接口或者命令去调用 Linux 的系统功能来实现,而容器运行时就是用来运行和管理容器进程、镜像的工具。

容器运行时分类

k8S为什么不支持docker了?

随着Docker的普及,容器化领域出现了Docker公司独占的趋势。为了应对这一局面,Docker将其libcontainer组件捐赠给OCI(开放容器倡议)组织,并将其更名为Runc,以去除与Docker的关联。Runc主要定义了镜像和运行时的规范。

为防止Docker的垄断,容器领域的几位领军人物成立了CNCF(云原生计算基金会),Kubernetes成为该基金会的代表作,容器编排领域也以K8S的胜出而告终。此时,Docker决定将其containerd组件捐赠给CNCF,以提升自身的存在感。

在2020年,Kubernetes 宣布弃用 dockershim,正式切换到容器运行时接口(CRI)。CRI 是一组接口,用于解耦 Kubernetes 平台与特定容器运行时的实现,最早在 Kubernetes 1.5中引入,充当kubelet和容器运行时之间的桥梁。弃用的主要原因并非 Kubernetes 无法使用 Docker,而是 CRI 的实现不再支持 dockershim,因此只支持兼容 CRI 接口的容器。

要不要放弃使用docker?

继续使用docker的优缺点:
  • 未来面临无法升级和使用高版本K8S环境;

  • 没有增加学习成本。

使用containerd的优缺点:
  • 命令不一样,有学习成本;

  • 暂时的字段格式略有区别;

  • 更简单、更稳定、更高效。

总结来说,Docker 是一个全面的容器管理解决方案,而 containerd 是一个专注于容器运行时的轻量级组件。

docker和containerd区别:

docker和containerd的镜像存储目录不一致,说明他们不是共享的,但是镜像可通用。

Containerd详解

官网:https://containerd.io/

containerd安装

官网下载地址:https://containerd.io/downloads/

# containerd软件包[root@node1 ~]# wget https://github.com/containerd/containerd/releases/download/v1.7.14/containerd-1.7.14-linux-amd64.tar.gz# runc软件包[root@node1 ~]# wget https://github.com/opencontainers/runc/releases/download/v1.2.0-rc.3/runc.amd64# cni软件包wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz注:containerd默认不会自带runc(真正创建容器的程序),所以需要安装runc程序,以及cni网络插件(容器之间网络通信所需)。解压缩,安装tar -zxvf  containerd-1.7.14-linux-amd64.tar.gz -C /usr/local# runc安装install -m 755 runc.amd64 /usr/local/sbin/runc# cni安装mkdir -p /opt/cni/bintar -zxvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz# 生成Containerd配置文件containerd config default > /etc/containerd/config.toml# 2条配置修改:# 65行:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8" 【修改pause容器镜像为国内】# 137行:SystemdCgroup = true 【让Runc使用system cgroup驱动,对容器进行资源划分,隔离。】# wq保存退出配置Systemd管理Containerd# 下载Containerd官方提供的Service文件:https://raw.githubusercontent.com/containerd/containerd/main/containerd.service# 将内容完整的复制到该路径下: vim /usr/lib/systemd/system/containerd.service启动Containerdsystemctl start containerdsystemctl status containerd● containerd.service - containerd container runtime   Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)   Active: active (running) since 二 2023-06-13 18:55:26 CST; 5h 4min ago     Docs: https://containerd.io  Process: 17524 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS) Main PID: 17526 (containerd)    Tasks: 9   Memory: 20.8M   CGroup: /system.slice/containerd.service           └─17526 /usr/local/bin/containerd

ctr和crictl使用

可以使用ctr或者crictl进行管理containerd,crictl是为K8S而生,只要当k8s.io命名空间存在才可使用。

ctr操作
## 列出镜像ctr i ls## 拉取镜像ctr i pull docker.io/library/redis:alpine## 查看命名空间ctr ns ls## 运行容器ctr run -t registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpine redis## 查看运行的容器ctr c ls## 查看容器运行任务ctr t ls## 杀死容器ctr t kill redis## 删除容器任务,但是容器中还可以看到,只是停止运行ctr t rm redis## 删除容器ctr c rm redis
crictl操作
## 列出镜像crictl images## 查看容器crictl ps## 查看PODcrictl pods

docker运行的容器在containerd是否看得到?

可以,如下图docker运行容器的容器ID可在containerd的task中匹配进行对应。两者的区别只是命名空间的不同,docker默认用的是default,而containerd使用的是moby,如果是K8S拉起containerd的话,则K8S会默认在containerd拉起并使用一个K8S.io的命名空间。

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

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

相关文章

使用OBS进行webRTC推流参考

参考腾讯云官方文档: 云直播 OBS WebRTC 推流_腾讯云 说明非常详细,分为通过WHIP和OBS插件的形式进行推流。 注意:通过OBS插件的形式进行推流需要使用较低的版本,文档里有说明,需要仔细阅读。

荣耀手机卸载应用商店、快应用中心等系统自带的

1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…

奇安信全流量(天眼)面试题

一、全流量设备(天眼)的部署架构 天眼系统采用旁路部署模式,通过流量镜像实现非侵入式监测,核心组件包括流量传感器、分析平台和文件威胁鉴定器,具体部署架构如下: 传感器部署 关键节点覆盖:在…

angular中的路由传参

目录 一、矩阵参数 一、矩阵参数 在angular中传参时可以使用矩阵参数,即直接通过变量值的形式在地址中体现,但需要注意参数的使用范围为当前路径段,而不是全局的查询参数。 const params {name: lhhh,age: 18,list: [{ name: htt }],}; //先…

设计模式(创建型)-抽象工厂模式

摘要 在软件开发的复杂世界中,设计模式作为解决常见问题的最佳实践方案,一直扮演着至关重要的角色。抽象工厂模式,作为一种强大的创建型设计模式,在处理创建一系列或相关依赖对象的场景时,展现出了独特的优势和灵活性。它通过提供一个创建对象的接口,让开发者能够在不指定…

从Excel到搭贝的转变过程

从Excel到搭贝 1. 简介 1.1 Excel简介 Excel 作为元老级的数据管理工具,功能强大且被广泛使用,但在现代工作场景中仍存在一些局限性,例如: 数据量处理有限:处理大规模数据时,Excel可能运行缓慢或崩溃。…

Text-to-SQL将自然语言转换为数据库查询语句

有关Text-To-SQL方法,可以查阅我的另一篇文章,Text-to-SQL方法研究 直接与数据库对话-text2sql Text2sql就是把文本转换为sql语言,这段时间公司有这方面的需求,调研了一下市面上text2sql的方法,比如阿里的Chat2DB,麻…

MFC开发:图形的绘制

文章目录 一、获取指定窗口的设备上下文二、画笔的介绍和使用三、绘制直线四、画刷的介绍和使用五、绘制扇形六、绘制圆形七、绘制文本 一、获取指定窗口的设备上下文 1.GetDC()函数的作用 GetDC() 是 Windows API 中的一个函数,它用于获取指定窗口的设备上下文&am…

SPI 总线协议

1、协议介绍 SPI,是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI,是一种高速的,全双工,同步的通信总线。主节点或子节点的数据在…

Qt msvc程序运行

第一个Qt msvc程序 我们一般用qt msvc来编译程序&#xff0c;就是用webview。 第一个Qt msvc webview程序实现如下&#xff1a; 运行结果&#xff1a; 标注&#xff1a; QT版本大于6.0的时候才能用<Webview>模块。 QT版本在大于5.2版本&#xff0c;引入了Webengine模…

Java设计模式建模语言面向对象设计原则

设计模式 设计模式的概念 设计模式最初用于建筑领域的设计中。 软件的设计模式&#xff0c;又称设计模式&#xff0c;是一套被反复使用&#xff0c;多数人知道的&#xff0c;经过分类编目的&#xff0c;代码设计经验的总结。 它描述了在软件设计过程中的一些不断重复发生的…

搜广推校招面经五十四

美团推荐算法 一、手撕Transformer的位置编码 1.1. 位置编码的作用 Transformer 模型没有显式的序列信息&#xff08;如 RNN 的循环结构&#xff09;&#xff0c;因此需要通过位置编码&#xff08;Positional Encoding&#xff09;为输入序列中的每个位置添加位置信息。位置…

深入解析 SQL 事务:确保数据一致性的关键

SQL 事务 什么是 SQL 事务&#xff1f;事务的 ACID 特性原子性&#xff08;Atomicity&#xff09;:示例&#xff1a; 一致性&#xff08;Consistency&#xff09;:示例&#xff1a; 隔离性&#xff08;Isolation&#xff09;:持久性&#xff08;Durability&#xff09;:示例&am…

【软考-架构】11.3、设计模式-新

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 &#x1f4af;考试真题题外话 项目中的应用 在实际项目中&#xff0c;我应用过多种设计模式来解决不同…

观察者模式详解:用 Qt 信号与槽机制深入理解

引言 你是否曾遇到这样的需求&#xff1a;一个对象的状态发生变化后&#xff0c;希望通知其他对象进行相应的更新&#xff1f;比如&#xff1a; 新闻订阅系统&#xff1a;当新闻发布后&#xff0c;所有订阅者都会收到通知。股票行情推送&#xff1a;股价变化时&#xff0c;所…

流量分析实践

下载附件使用wireshark打开&#xff0c;发现数据包非常多&#xff0c;一共有1万多条数据&#xff0c;我们点击分析来看一下协议分级 然后我们再来看一下会话&#xff0c;看有哪些ip地址&#xff0c; 我们通过会话结合大部分的流量发现&#xff0c;172.17.0.1一直在请求172.17.0…

新手村:混淆矩阵

新手村&#xff1a;混淆矩阵 一、前置条件 知识点要求学习资源分类模型基础理解分类任务&#xff08;如二分类、多分类&#xff09;和常见分类算法&#xff08;如逻辑回归、决策树&#xff09;。《Hands-On Machine Learning with Scikit-Learn》Python基础熟悉变量、循环、函…

MYSQL库的操作

目录 一、创建数据库 二、字符集和校验规则 1、查看系统默认字符集以及校验规则 2、查看系统支持的所有字符集以及字符集校验规则 3、指定字符集以及校验规则来创建数据库 4、校验规则对数据库的影响 三、操纵数据库 1、查看数据库 2、修改数据库 3、删除数据库 4、数…

Next App Router(下)

五、loading 新增 app/loading.tsx 页面 const Loading () > {return <div>Loading...</div>; }; export default Loading;修改 app/page.tsx页面 /** 假设为一个获取数字的api */ const fetch_getNumber async (): Promise<number> > {return ne…

【JAVA】】深入浅出了解cookie、session、jwt

文章目录 前言一、首先了解http的cookie是什么&#xff1f;Cookie 属性及其含义1. NameValue2. Expires3. Max-Age4. Domain5. Path6. Secure7. HttpOnly8. SameSite示例 Cookie 分类1. Session Cookies2. Persistent Cookies3. First-Party Cookies4. Third-Party Cookies 二、…