Docker与containerd:容器技术的双璧

news2024/11/24 20:24:07

🐇明明跟你说过:个人主页

🏅个人专栏:《Docker幻想曲:从零开始,征服容器宇宙》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Docker和containerd的背景和起源

2、Docker与containerd在容器生态中的位置

3、OCI、CRI、CNI

二、容器运行时技术

1、容器运行时的概念和作用

2、Docker和containerd在容器运行时中的角色

三、Docker与containerd的关系

1、Docker与containerd的关联与区别

2、containerd作为Docker的基础组件的作用

四、 Docker和containerd的应用前景


一、前言

1、Docker和containerd的背景和起源

Docker的背景和起源:

  • Docker 是由 Docker 公司(前身为 dotCloud 公司)于 2013 年推出的开源项目。它的创始人是 Solomon Hykes。Docker 最初是一个单一的开源项目,旨在简化应用程序的打包、交付和运行过程。
  • Docker 最初采用了 LXC(Linux 容器)技术作为底层容器技术,但后来迁移到了自己开发的 libcontainer,这使得 Docker 容器更加轻量级、快速和安全。
  • Docker 的出现极大地推动了容器技术的普及和发展,成为了容器化应用的事实标准,为软件开发和交付带来了革命性的变化。

containerd的背景和起源:

  • containerd 是一个开源的容器运行时,最初是作为 Docker 项目的一部分开发的。它由 Docker 公司于 2017 年开源,并移交给了 CNCF(Cloud Native Computing Foundation)管理。
  • containerd 的目标是提供一个通用的容器运行时接口,以支持多种容器格式和运行时环境。它实现了容器的基本功能,如容器生命周期管理、镜像管理、网络和存储等。
  • containerd 最初是作为 Docker 项目中的一个组件,但后来被拆分出来成为一个独立的项目,并得到了广泛的社区支持和贡献。

2、Docker与containerd在容器生态中的位置

在容器生态系统中,Docker 和 containerd 扮演着不同但互补的角色,它们各自在容器生命周期的不同阶段发挥作用。

Docker:

  • Docker 是一个全面的容器平台,提供了容器的构建、分发、运行和管理等功能。它包括了 Docker Engine、Docker CLI、Docker Compose 等工具和组件。
  • Docker Engine 是 Docker 的核心组件,负责管理容器的生命周期、镜像构建和运行环境等。Docker CLI 是 Docker 的命令行工具,提供了用户与 Docker Engine 交互的接口。
  • Docker 提供了一套完整的容器化解决方案,使得用户可以轻松地构建、部署和管理容器化应用。它对容器技术的普及和推动起到了重要的作用。

containerd: 

  • containerd 是一个通用的容器运行时,专注于提供容器的基本功能,如容器生命周期管理、镜像管理、存储和网络等。
  • containerd 提供了标准化的容器运行时接口,允许不同的容器平台和工具集成和使用。它可以作为容器平台的核心组件,也可以作为其他容器工具和平台的基础组件。
  • containerd 被设计为可插拔和模块化的,允许用户根据自己的需求进行定制和扩展。它提供了一个灵活和可靠的容器运行时平台,为容器生态系统的多样化和发展做出了贡献。

3、OCI、CRI、CNI

OCI、CRI 和 CNI 是容器生态中的标准化组织和接口,分别用于容器镜像和容器运行时的标准制定以及容器网络的插件管理。

OCI(Open Container Initiative):

  • OCI 是一个开放的容器标准组织,旨在制定容器运行时和镜像的开放标准,以推动容器生态系统的互操作性和标准化。OCI 制定了容器镜像格式(OCI Image Specification)和容器运行时规范(OCI Runtime Specification)等标准。
  • Docker 和 containerd 都遵循 OCI 的规范,以确保容器镜像和容器运行时在不同的容器实现之间具有互操作性和兼容性。这使得用户可以更加灵活地选择不同的容器运行时和工具,而不必担心不同实现之间的差异。

CRI(Container Runtime Interface):

  • CRI 是 Kubernetes 中定义的容器运行时接口,用于与容器运行时交互。它定义了 Kubernetes 和容器运行时之间的标准接口,使得 Kubernetes 可以与任何符合 CRI 接口的容器运行时进行通信和管理。
  • containerd 是符合 CRI 接口标准的容器运行时实现之一,因此可以作为 Kubernetes 集群的容器运行时。Kubernetes 通过 CRI 接口与 containerd 交互,实现容器的创建、启动、停止等操作。

CNI(Container Networking Interface):

  • CNI 是用于容器网络插件的标准接口,定义了容器运行时和网络插件之间的通信协议。它使得容器运行时可以与不同的网络插件进行通信,并动态地配置容器的网络环境。
  • Kubernetes 中使用了 CNI 来管理容器的网络。Kubernetes 通过 CNI 接口调用网络插件来创建和管理容器的网络,从而实现容器之间的通信和网络隔离。

二、容器运行时技术

1、容器运行时的概念和作用

容器运行时(Container Runtime)是容器生态中的一个关键组成部分,它负责容器的整个生命周期管理,包括容器的创建、启动、运行、停止和销毁等过程。简单来说,容器运行时就是掌控容器从拉取镜像到启动运行再到中止的整个过程。

容器运行时的主要作用包括:

  1. 管理容器生命周期:容器运行时负责容器的启动、停止和销毁等操作,确保容器按照预期的生命周期运行。
  2. 提供容器运行环境:容器运行时为容器提供必要的运行环境,包括系统资源、网络、存储等,以确保容器能够正常运行。
  3. 管理容器镜像:容器运行时通常也负责镜像的管理,包括镜像的拉取、存储、构建和删除等操作。
  4. 安全和隔离性:容器运行时利用Linux内核的cgroups和namespaces等技术,为容器提供安全和隔离的运行环境,防止容器之间的资源竞争和相互干扰。

在容器生态中,有多种容器运行时实现,其中最广为人知的可能就是Docker。Docker不仅提供了容器运行时的功能,还整合了镜像管理、容器编排等其他功能,形成了一个完整的容器平台。而containerd属于更轻量级的容器运行时,更加专注于提供核心的容器运行时功能,可以与其他容器编排工具(比如kubernetes)配合使用。

2、Docker和containerd在容器运行时中的角色

Docker和containerd在容器运行时中各自扮演着重要的角色,但它们的定位和功能有所不同。

Docker是一个完整的容器平台,它提供了丰富的工具和功能,包括镜像构建、容器运行、管理以及编排等。Docker封装了应用程序及其依赖项,将它们打包成一个可移植的容器,从而确保在不同环境中应用程序的一致性和可靠性。当使用Docker运行一个容器时,实际上是通过Docker守护程序、containerd和runc来共同完成的。Docker守护程序负责接收并处理来自Docker客户端的请求,containerd则作为容器运行时来负责容器的生命周期管理。

containerd是一个工业级标准的容器运行时,它更专注于容器的生命周期管理,包括容器的创建、运行、停止和销毁等过程。containerd强调简单性、健壮性和可移植性,几乎囊括了单机运行一个容器运行时所需要的一切,包括执行、分发、监控、网络、构建、日志等功能。与Docker相比,containerd的调用链更短,组件更少,因此更稳定,占用节点资源也更少。在某些特定场景下,如需要调用Docker API、使用Docker Compose或Docker Swarm时,Docker会作为更合适的选择。而在其他情况下,如Kubernetes环境中,containerd因其稳定性和资源占用优势,常被作为首选的容器运行时。

三、Docker与containerd的关系

1、Docker与containerd的关联与区别

关联:

  1. containerd是Docker的底层容器运行时。Docker在其架构中使用了containerd来处理与容器生命周期管理相关的任务,如容器的创建、启动、停止和销毁等。这使得Docker能够更专注于提供丰富的容器管理功能,而containerd则确保容器运行时的稳定性和性能。
  2. 两者都是基于OCI(Open Container Initiative)标准。OCI是一个轻量级的开放式管理架构,旨在制定容器运行时和镜像的规范。Docker和containerd都遵循这些规范,使得它们可以与其他遵循OCI标准的工具进行互操作。

区别: 

  1. 功能与定位:Docker是一个完整的容器平台,提供了从构建、打包、分发到运行容器的全套解决方案。它包括了Docker Engine、Docker Swarm、Docker Compose等多个组件,提供了镜像管理、容器编排等高级功能。而containerd则是一个轻量级的容器运行时,专注于容器的生命周期管理,旨在提供稳定、高效的容器运行环境。
  2. 架构与组件:Docker的架构相对复杂,包含了多个组件和较长的调用链。而containerd的架构更为简单,调用链更短,组件更少,这使得它在某些场景下更加稳定,且占用节点资源更少。
  3. 使用场景:Docker因其丰富的功能和广泛的应用场景,适用于需要复杂容器管理功能的用户,如开发、测试、部署和运维等多个方面。而containerd则更加适合于轻量级的容器场景,如边缘计算、物联网等,以及对稳定性和性能有更高要求的场景。

2、containerd作为Docker的基础组件的作用

  1. 容器生命周期管理:containerd是负责容器生命周期管理的关键组件。它能够启动、停止、重启容器,确保容器按照预期的生命周期运行。这使得Docker可以依赖containerd来管理其创建的容器,保证容器的正常运行和资源的合理分配。
  2. 镜像管理:containerd还负责镜像的管理。在容器运行前,containerd会从镜像仓库中拉取镜像到本地,为容器的启动提供必要的文件和配置。这确保了Docker在创建容器时能够使用正确的镜像,并提供一致的运行环境。
  3. 调用和运行:当Docker守护程序接收到来自客户端的指令时,它会将这些指令传递给containerd进行处理。containerd通过适当的参数调用runc或其他兼容的容器运行时来启动容器,确保容器按照指定的配置和参数运行。
  4. 资源管理和优化:containerd通过管理和优化存储和网络资源,提高了容器的性能和稳定性。它能够对存储进行快照、复制和迁移等操作,以满足不同场景下的存储需求。同时,containerd还能够管理网络附件,确保容器之间的网络通信顺畅无阻。

四、 Docker和containerd的应用前景

  1. 应用部署和交付:Docker和containerd提供了便捷的容器打包和交付机制,使得应用的部署变得更加简单和可靠。开发人员可以使用Docker构建和打包应用,然后将其交付给运维团队使用containerd进行部署。
  2. 跨平台支持:Docker和containerd支持跨平台的容器运行,可以在不同的操作系统和云平台上运行相同的容器镜像,极大地提升了应用的可移植性和灵活性。
  3. 微服务架构:容器技术是微服务架构的理想实现方式之一,Docker和containerd为构建、部署和管理微服务提供了强大的支持。通过将应用拆分为多个独立的容器,可以实现更好的可伸缩性、故障隔离和部署灵活性。
  4. 持续集成/持续部署(CI/CD):Docker和containerd可以与CI/CD工具集成,实现自动化的构建、测试和部署流程。开发团队可以使用Docker容器化的方式打包应用,然后通过containerd将其部署到生产环境中,从而实现持续交付和快速迭代。
  5. 边缘计算:随着边缘计算的发展,Docker和containerd也开始在边缘场景中发挥重要作用。它们可以帮助将应用部署到边缘设备或边缘节点上,并提供可靠的运行环境和管理机制。

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Docker的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

【C++】堆区空间的申请和释放--- 2024.3.19

目录 C和C的区别(申请堆区空间)C中的new和delete结束语 C和C的区别(申请堆区空间) 在c语言中,在遇到需要申请一块堆区空间时,我们往往会使用malloc申请,使用free进行释放,但是为什么…

深入浅出前端本地储存

引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

漏洞扫描服务为什么这么重要?

漏洞扫描服务作为网络安全领域的重要一环,发挥着不可或缺的作用。漏洞扫描服务不仅能够实时防护网络免受各类恶意攻击,还能为网络管理人员提供定期的安全自我检测与评估,确保网络的稳定与安全运行。那么什么是漏洞扫描呢? 漏洞是在…

蓝桥杯之动态规划冲刺

文章目录 动态规划01背包小练一下01背包网格图上的DP完全背包 最长公共字符串最长递增子序列 动态规划 动态规划:确定好状态方程,我们常常是确定前 当状态来到 i 时,前 i 个物体的状态是怎么样的,我们并不是从一个点去考虑&#x…

【1】THIS IS NOT PROLIFIC PL2303. PLEASE CPMTACT YOUR SUPPLIER

0x01 问题描述 连接COM口连接不上,出现THIS IS NOT PROLIFIC PL2303. PLEASE CPMTACT YOUR SUPPLIER.如下图 0x02 问题解决 1、分析后,因为是windows 11 系统,就装一下驱动。右键单击--》属性 2、更新驱动程序--》浏览我的电脑以查找驱动程序…

企业应如何建立有效的内控制度?

内部控制制度(以下简称“内控制度”)作为企业生产经营活动自我调节、自我约束的内在机制,在企业管理系统中具有举足轻重的作用。内部控制制度的建立、健全及实施情况的好坏,是企业生产经营成败的关键。因此,企业应该建…

粒子群算法 - 目标函数最优解计算

粒子群算法概念 粒子群算法 (particle swarm optimization,PSO) 由 Kennedy 和 Eberhart 在 1995 年提出,该算法模拟鸟群觅食的方法进行寻找最优解。基本思想:人们发现,鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…

软件工程-第三版王立福-第1章 绪论

本书结合IEEE最新发布的软件工程体系SWEBOK,和IEEE/ACM软件工程学科小组公布的软件工程教育知识体系SEEK,北大本科生指定教材。注重基础知识的系统性,选材的先进性及知识的应用。2009年出版 软件开发本质的认识,两大技术问题&…

【Linux】Linux基本开发工具(yum) (vi/vim)的使用

本文章内容: 学习yum工具,进行软件安装掌握vim编辑器使用 Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成…

一文带你详解天池工业数据集

人工智能是国家战略性新兴产业,制造业是国民经济的主体,随着人口红利的消失,加强设备自动化改造,提高生产自动化程度,减小劳动强度,改善作业环境,已经成为制造业的普遍共识。天池大赛开放出一批…

MySQL中的基本SQL语句

MySQL中的基本SQL语句 查看操作 1. 查看有哪些数据库 show databases; 2.切换数据库 use 数据库名;比如切换至 mysql数据库 use mysql;3.查看数据库中的表 show tables;4.查看表中数据 select 要查询的东西 from 表名 [ where 条件 ];select * from 表名…

大众EA111发动机

大众EA111发动机_什么是大众EA111发动机_太平洋汽车百科 大众EA111发动机_什么是大众EA111发动机_太平洋汽车百科 大众的EA111系列发动机是大众公司小排量发动机的主力,有1.2L、1.4L、1.6L三种排量。大众的EA111系列发动机融合了缸内直喷、涡轮增压等先进技术&…

数据库报Statement cancelled due to timeout错误处理方法

如上图,如果数据库报错,可考虑是事务导致锁表问题。 解决方法: 1.查看下在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 2,kill第一步查出的线程ID

EasyExcel模板填充list时按第一行格式合并单元格(含分页线设置)

前言: 在使用easyExcel填充list时,第一行存在合并单元格的情况下,后面使用forceNewRow()填充的行却没有合并样式。 模板: 填充后: 自定义拦截器: 根据官方文档的提示,我们需要自定义拦截器来…

backtrader回测股票:突破20日均线买入,跌破20日均线卖出

数据源:akshare 回测工具:backtrader 策略:突破20日均线买入,跌破20日均线卖出 代码: from datetime import datetime import backtrader as bt #1.9.78.123 import matplotlib.pyplot as plt #3.8.3 import aks…

[Qt学习笔记]QT下获取Halcon图形窗口鼠标事件并执行相应操作

目录 1、背景2、参考信息3、目标4、步骤4.1 Halcon库的配置4.2 读取图像,并实现图像自适应窗体控件大小4.3 主要的图形绘制和贴图操作见如下代码,其中重点为全局函数的创建来实现选择Select、拖拽Drag和尺寸Resize事件响应。 5、总结 1、背景 在视觉项目…

春暖花开,一起来看看2024年品牌春分海报吧!

春分(Vernal equinox)已至,春花烂漫、燕子归来、百草回芽。 今天我们要分享的是2024年品牌发布的春分节气海报合集,快来随我们一起感受这昂扬、蓬勃的春意吧! (1)泸州老窖 (2)BD…

C语言——自定义类型——结构体(从零到一的跨越)

目录 前言 1.什么是结构体 2.结构体类型的声明 2.1结构体的声明 2.2结构体的创建和初始化 2.3结构成员访问操作符 2.3.1结构体成员直接访问 2.3.2结构体成员的间接访问 2.4结构体变量的重命名 2.5结构体的特殊声明 2.6结构的自引用 3.结构体内存对齐 3.1对齐规则 3…

docker harbor.v2.9.2搭建镜像无法下载问题解决

在通过部署docker harbor时,采用的是离线包的方式,当解压压缩包后,执行prepare脚本步骤中有一步是要获取prepare:v2.9.2版本镜像 结果执行脚本时报如下错误: Unable to find image goharbor/prepare:v2.9.2 locally 这时候我们就…

网络: DHCP 协议简介

文章目录 1. 前言2. DHCP 协议简介2.1 DHCP 客户端广播 DHCPDISCOVER 消息2.2 DHCP 服务器回复 DHCPOFFER 消息2.3 DHCP 客户端广播 DHCPREQUEST 消息2.4 DHCP 服务器回复 DHCPACK 消息2.5 剩余的工作 3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误&…