容器技术与操作系统

文章目录

  • 容器技术 vs 虚拟机
    • 操作系统
    • 容器
  • Docker与操作系统

容器技术 vs 虚拟机

操作系统

操作系统是一个很重而且很笨的程序,简称笨重,有多笨重呢?
操作系统运行起来是需要占用很多资源的,大家对此肯定深有体会,刚装好的系统还什么都没有部署,单纯的操作系统其磁盘占用至少几十G起步,内存要几个G起步。

我们没有办法划分出更过虚拟机从而部署更多的应用程序,可是我们部署的是应用程序,要用的也是应用程序而不是操作系统。
如果有一种技术可以让我们避免把内存浪费在“无用”的操作系统上岂不是太香?这是问题一,主要原因在于操作系统太重了。

还有另一个问题,那就是启动时间问题,我们知道操作系统重启是非常慢的,因为操作系统要从头到尾把该检测的都检测了该加载的都加载上,这个过程非常缓慢,动辄数分钟,因此操作系统还是太笨了。

容器

现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案就是上面提到的虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。

与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。

在这里插入图片描述
从图中我们可以看到容器更加的轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式,So cool。

Docker与操作系统

把image理解为可执行程序,container就是运行起来的进程。dockerfile就是image的源代码,docker就是"编译器"

Docker 是一种容器化平台,它的底层实现原理涉及多个组件和技术,与操作系统的关系密切,并且使用操作系统的特性来实现容器化。以下是 Docker 的底层实现原理以及与操作系统的关系的一些关键点:

命名空间(Namespaces):Docker 使用 Linux 内核的命名空间来隔离进程、网络、文件系统、用户等资源。每个容器都有自己的命名空间,使得它们看起来像是在独立的操作系统环境中运行。这些命名空间允许容器拥有自己的进程树、网络接口、文件系统根目录等。

控制组(Control groups):控制组是 Linux 内核的一个特性,它用于限制和管理进程组的资源使用,包括 CPU、内存、磁盘 I/O、网络带宽等。Docker 使用 cgroups 来分配和控制容器的资源使用,以确保容器在宿主系统上得到适当的资源分配。

联合文件系统(Union File System):Docker 使用联合文件系统来创建容器的文件系统。联合文件系统允许多个文件系统层叠在一起,形成一个容器的文件系统。这使得镜像的分层存储和容器的快速启动变得可能,因为它们可以共享相同的底层文件系统层。

容器镜像:容器镜像是一个不可变的文件系统快照,包含应用程序和其依赖项。镜像可以根据层叠文件系统的方式进行构建和共享,这使得容器可以轻松地创建和部署。镜像也是 Docker 容器的基础,每个容器都是基于一个或多个镜像启动的。

宿主操作系统:Docker 运行在宿主操作系统之上,并与宿主操作系统共享内核。这意味着 Docker 容器与宿主操作系统相互影响,并且宿主操作系统必须是支持容器技术的,通常是基于 Linux 的发行版。

关于资源分配,Docker 使用 cgroups 来限制容器的资源使用,可以通过 Docker 命令或配置文件来指定容器的 CPU、内存、磁盘等资源限制。这样可以确保容器在运行时不会过度消耗宿主系统的资源,同时允许多个容器在同一宿主系统上并发运行。

总的来说,Docker 的底层实现原理涉及 Linux 内核的各种特性和技术,它与操作系统紧密合作,通过命名空间、cgroups、联合文件系统等机制来实现容器的隔离和资源管理,从而提供了轻量级、可移植和可扩展的容器化解决方案。

参考:https://zhuanlan.zhihu.com/p/187505981

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

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

相关文章

基于模型驱动的可视化开发平台——JNPF

目录 一、模型驱动原理 二、低代码核心功能 1.业务建模: 2.表单建模: 3.页面建模: 4.流程建模: 5.报表建模: 6.门户建模: 7.大屏建模: 8.移动建模: 目前,国外内…

一个例子带你入门影刀编码版(二)

文章结构 摘要元素定位店铺所有宝贝单个宝贝详细信息相关链接 摘要 将通过一个电商业务场景下的真实需求,带领大家零基础入门影刀编码版,本系列将会分三步讲解,从接到需求到最后完成发版,整个过程中我们需要做些什么?…

BugKu-Web-Simple_SSTI_1Simple_SSTI_2(浅析SSTI模板注入!)

何为SSTI模块注入? SSTI即服务器端模板注入(Server-Side Template Injection),是一种注入漏洞。 服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模板内容的一部分,模板引擎在进行目标编译渲…

深入理解TheadLocal的使用场景和注意事项

前言 在日常实际开发当中我们往往会看到项目中有使用 ThreadLocal 的场景,大多数人有时候可能涉及不到自己的业务则没有进行关注。通常我在看代码时对于一些未知的东西常常引起我的好奇,我往往会分析:为什么要这么做?好处是什么&…

fuxploide,一款针对文件上传的Fuzz检测工具

fuxploide,一款针对文件上传的Fuzz检测工具 1.工具概述2.安装3.参数解析4.使用案例1.工具概述 Fuxploider 是一种开源渗透测试工具,可自动检测和利用文件上传表单缺陷。该工具能够检测允许上传的文件类型,并能够检测哪种技术最适合在所需的 Web 服务器上上传 Web Shell 或任…

【ARM Trace32(劳特巴赫) 使用介绍 1.2 - ARM 系统调试中常见的挑战】

请阅读【Trace32 ARM 专栏导读】 文章目录 ARM 系统调试中常见的挑战ARM 系统调试接口简例DAP-Debug Access portDAP 状态检查多核调试虚拟/物理地址Cache 数据一致性问题系统异常系统复位系统死机PC 采样Memory 采样RAM/Core Dump 分析小概率问题ARM 系统调试中常见的挑战 调试…

交直流充电桩检测

随着电动汽车的普及,充电桩的需求也在不断增加。为了保证充电桩的正常运行和使用安全,对其进行定期检测是非常必要的。检查充电桩的外壳是否有破损、变形等现象,以及充电桩的标识是否清晰可见。同时,还要检查充电桩的接口是否完好…

Elasticsearch:使用 OpenAI 生成嵌入并进行向量搜索 - nodejs

在我之前的文章: Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)(二)(三)(四)​​​​​ 我详细地描述了如何使用…

自然语言处理第2天:自然语言处理词语编码

​ ☁️主页 Nowl 🔥专栏 《自然语言处理》 📑君子坐而论道,少年起而行之 ​​ 文章目录 一、自然语言处理介绍二、常见的词编码方式1.one-hot介绍缺点 2.词嵌入介绍说明 三、代码演示四、结语 一、自然语言处理介绍 自然语言处理&#xf…

5、Grounded Segement Anything

github sam安装与基本使用 stable diffusion安装与基本使用 安装GroundingDINO git clone https://github.com/IDEA-Research/GroundingDINO.git cd GroundingDINO pip install -e .pip install diffusers transformers accelerate scipy safetensors安装RAM&Tag2Text …

深度学习基本概念

1.全连接层 全连接层就是该层的所有节点与输入节点全部相连,如图所 示。假设输入节点为X1, X 2, X 3,输出节点为 Y 1, Y 2, Y 3, Y 4。令 矩阵 W 代表全连接层的权重, W 12也就代表 …

【C】⽂件操作

1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化…

世微 AP5199S 降压恒流车灯驱动IC 兼容HV9910

说明 AP5199S 是一款外围电路简单的多功能平均电流 型 LED 恒流驱动器,适用于宽电压范围的非隔离式 大功率恒流 LED 驱动领域。 芯片 PWM 端口支持超小占空比的 PWM 调光, 可响应最小 60ns 脉宽。芯片采用我司专利算法,为客 户提供最佳解决方…

AIGC时代,如何保障ai绘图的算力需求

AIGC是目前非常热门的技术领域,被广泛应用于各个行业和领域,但同时AIGC也面临着诸多的痛点,那么如何解决这些痛点问题呢?云时代,又是如何通过云电脑赋能AIGC行业的,那么一起来文章中了解一下吧。 AIGC是什…

Trie 树详解

Trie 树详解 Trie 树(字典树)是一种用于高效存储和搜索字符串集合的树状数据结构。它的主要特点是能够在O(N)时间内实现字符串的插入、删除和搜索操作,其中 N 是字符串的长度。Trie 树的结构适用于敏感词过滤、单词搜索、自动补全等场景。在…

【HarmonyOS】【DevEco Studio】安装教程及环境配置问题解决

目录 一、DevEco Studio 安装二、配置环境ohmp安装报错问题解决方法一:注册表删除数值(没解决)方法二:进入DevEco Studio点击Settings进入设置(没解决)方法三:自己去官网下载ohmp的包安装&#…

PR片头模板|圣诞节快乐视频片头模板 Merry Christmas Logo

Merry Christmas logo 圣诞节快乐片头模板PR视频剪辑素材免费下载。 3个文本层。 9秒持续时间。 轻松的颜色控制。 After Effects and Premiere Pro 2021或更高版本。 全高清(19201080). 不需要插件。 包括视频教程. 不包括音频。 快速渲染。 来自PR模板…

Corona最新渲染器Corona11详解,附送下载地址

近日,Corona进行了大版本更新,发布了最新的Corona11。这次更新,包含众多新功能和新修复,借助 Corona 11 用户可将作品提升到更高的创作水准,更真实可感的视觉水平。 那么更新了那些呢?一起来看看吧&#x…

zookeeper1==zookeeper源码阅读,源码启动ZK集群

下载源码 Tags apache/zookeeper GitHub https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1 JDK8 MAVEN3.8.6 mvn -DskipTeststrue package 配置ZK1 zkServer.cmd中指出了启动类是 QuorumPeerMain QuorumPeer翻译成集群成员比较合理&#xf…

el-table/avue-curd 相同列内容合并

1.效果 2.html 3.js spanMethod({ row, column, rowIndex }) {if (column.property deviceName) {if (rowIndex > 0 && row.deviceName this.data[rowIndex - 1].deviceName) {return {rowspan: 0,colspan: 1,};}let rowspan 1;for (let i rowIndex 1; i < …