Docker容器镜像、Docker运行时用户空间和Linux内核之间的关系介绍

news2024/11/15 9:03:55
☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython

一、引言

我们都知道,运行的容器就是一个独立的Linux进程,当通过docker run 指令运行一个Docker容器时,首先找到镜像文件,然后根据镜像的配置信息,创建一个新的运行时容器。

本文来详细分析一下镜像、容器和Linux系统之间的具体关系。

二、linux的内核空间、用户空间、rootfs

由于容器比较特殊,它既是一个特殊的Linux的进程,又保持封闭和独立。在分析之前,我们需要先总结一下linux的内核空间、用户空间、bootfs、rootfs的相关知识:

  • Linux 操作系统由内核空间kernal 和 用户空间组成,用户空间不能直接访问内核空间;bootfs和rootfs则是两个不同的文件系统,rootfs本质上是用户内存空间的一部分,它可以映射到磁盘空间
  • 内核是操作系统的核心,不同Linux的内核差别不大,内核空间负责管理系统的硬件和软件资源,控制着系统硬件和软件的运行。它提供了各种系统服务和资源管理功能,如进程管理、内存管理、设备驱动程序、文件系统等,内核空间由bootfs负责引导加载
  • 用户空间是一个相对内核空间而言虚拟的概念,它指的是用户在使用计算机时所能看到的和操作的环境,包括Shell终端、文件系统、应用程序、系统库和配置文件等,是运行用户应用程序的环境,以及用户可以在其中进行文件和目录的创建、删除、修改等操作的空间。
  • Bootfs(引导文件系统)b是存储在磁盘上的一个独立的文件系统,通常被置于磁盘的开头的扇区或分区,存储系统启动时需要的文件和数据,主要包含引导加载器和内核映像、启动参数、自定义启动脚本等,负责在系统启动时加载内核和引导参数等数据。在系统启动时,BIOS或UEFI会首先加载bootfs到内存中,并将控制权交给引导加载器,引导加载器再加载内核映像和启动参数等数据,以便系统能够正确地启动。一旦系统启动完成,bootfs就会被卸载,最终将控制权交给内核
  • Rootfs(根文件系统)为系统的根文件系统,是一个最小化的内存文件系统,不依赖于硬盘上的文件系统,只包含运行Linux所必需的文件和目录,主要用于存储系统根目录下的文件和子目录、一些系统工具和备份数据,以及其他必需的资源和配置文件。例如/bin、/dev、/etc、/proc、/sys、/tmp和/var等目录
  • Rootfs是用户空间的基础,在系统启动后,rootfs会被挂载到内存中的系统根目录下,将用户空间中的程序和数据加载到内存中,成为用户空间和内核空间之间的桥梁,以便用户空间能够正确地运行。因此rootfs是用户空间的基础,它提供了用户空间所需的文件和目录等资源,并与内核空间相互协作,共同维护着系统的稳定运行。不同 Linux 发行版的区别主要就是 rootfs。比如 Ubuntu 14.04 使用 upstart 管理服务,apt 管理软件包;而 CentOS 7 使用 systemd 和 yum。这些都是用户空间上的区别,Linux kernel 差别不大。所以 Docker 可以同时支持多种 Linux 镜像,模拟出多种操作系统环境。
三、Docker容器镜像、Docker运行时用户空间和Linux内核之间的关系

理解了kernal、rootfs、用户空间的概念和关系,我们再来介绍容器镜像、容器运行时的用户空间以及操作系统内核之间的关系:

  • 由于不同发行版本的Linux内核差别不大,所有Docker容器运行时的底层都直接使用 Host 的 kernel,因此容器是复用宿主机的Linux内核,只要提供DOCKER运行时的用户空间
  • 用户空间是构建在rootfs基础之上的,因此每个容器都有一个独立的rootfs文件系统
  • 容器镜像就是为容器运行时提供rootfs,也就是说rootfs是构建在Docker镜像之上的

容器镜像确实是容器构建rootfs和用户空间的基础。容器复用了Linux内核,这意味所有容器共享内核,从而节省了空间。同时,容器的独立用户空间挂载的rootfs与Linux内核交互,这使得容器的镜像无需关注Linux内核的版本。

此外,容器通过提供镜像构建的rootfs和用户空间,保持了容器的独立性和安全性。每个容器都有自己的文件系统和用户空间,可以运行不同操作系统版本的rootfs和用户空间,而不会相互干扰。同时,由于容器与底层主机系统隔离,因此容器提供了一定程度的安全性。

四、小结

容器镜像是容器构建rootfs和用户空间的基础,容器是镜像的运行态。容器复用Linux内核,通过容器独立用户空间挂载的rootfs与Linux内核交互,这样既使得容器的镜像无需关注Linux内核的版本,又节省了空间,同时容器通过提供镜像构建的rootfs和用户空间又保持了容器的独立性和安全性。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多云计算相关方面的介绍请参考《云计算与公有云服务》专栏的介绍。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

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

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

相关文章

Python协程技术:从Greenlet到async/await的异步编程探索

协程: ​ 协程,在Python中,协程是一种轻量级的并发编程方式,它允许在单个线程内实现多个独立的执行流。协程可以在不同的执行点之间进行切换,而无需依赖于操作系统的线程切换。这使得协程成为处理高并发和异步任务的有…

大语言模型新升级:亚马逊云科技2023芯片创新日

在这个充满活力的2023年芯片创新日,Amazon EC2 的副总裁 Dave Brown 与观众分享了他与 EC2 的15年漫长旅程。他的眼中闪烁着对技术的热情,他描述了自己如何与一个才华横溢的团队合作,在这大语言模型与生成式AI的元年中致力于为客户提供最佳的…

Python基础语法之学习字符串快速格式化

Python基础语法之学习字符串快速格式化 一、代码二、效果 一、代码 # 通过f"{占位}"控制字符串快速格式化,不做精度控制 name "张三" age 13 money 12.5 text f"姓名是{name},年龄是{age},钱是{money}" print(text)二、效果 每一天都是一个…

Codeforces Round 906 (Div. 2)(D推公式 E1分类讨论区间 E2 dp+线段树)

A - Doremys Paint 3 推公式得 b1b3b5b7.... b2b4b6b8... 所以如果只有一个数或者两个数且数量差小于等于1即可 #include<bits/stdc.h> using namespace std; const int N 2e510,mod1000003; #define int long long typedef long long LL; typedef pair<int, in…

idea类和方法模版

类模版 修改目标位置 class #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java")/*** ${Description}* author whc ${YEAR}/${MONTH}/${DAY}* version v1.0 */public class ${NAME} { }inte…

#HarmonyOS:软件安装

软件地址 https://developer.harmonyos.com/cn/develop/deveco-studio#download 安装的建议 这个界面这样选&#xff0c;其他界面全部按照默认路径往下走&#xff01;&#xff01;&#xff01; 等待安装… 安装环境错误处理 一般就是本地node配置一场导致&#xff0c;建议…

在Pycharm中创建项目新环境,安装Pytorch

在python项目中&#xff0c;很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 首先我们需要去官网下载conda。然后在Pycharm下面添加conda的可执行文件。 用conda创建新环境。 二、…

Netfilter中的NAT

目录 前瞻 SNAT和DNAT SNAT DNAT 实验 前瞻 NAT: &#xff08;network address translation&#xff09;&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 NAT分为SNAT和DNAT SNAT&#xff1a;支持POSTROUTING, INPUT&…

Java封装讯飞星火大模型历险记

问题描述与分析 现状描述与目标 在使用讯飞星火大模型API的过程中&#xff0c;API的返回结果在可以在其他线程中进行分次打印&#xff0c;但是在main方法中直接打印返回结果&#xff0c;显示为空。这种情况下不利于二次封装&#xff0c;希望在main方法中获取完整的API返回结果…

POE浪涌保护器+POE防雷器综合解决方案

POE&#xff08;Power over Ethernet&#xff0c;以太网供电&#xff09;是一种利用双绞线以太网布线同时传输电力和数据的技术&#xff0c;目前常用于智能安防摄像系统、无线局域网、物联网等领域。POE技术可以简化网络设备的布线和安装&#xff0c;降低成本和维护难度&#x…

文献速递:机器学习在超声波非破坏性评估中的合成和增强训练数据综述(第一部分)— (机器学习方法在超声波检测中的概述)

文献速递&#xff1a;机器学习在超声波非破坏性评估中的合成和增强训练数据综述&#xff08;第一部分&#xff09;— &#xff08;机器学习方法在超声波检测中的概述&#xff09; Title 题目 A review of synthetic and augmented training data for machine learning in ul…

python用YOLOv8对图片进行分类

用yolov8的模型进行分类 先上效果图 图片资源 模型下载地址 https://github.com/ultralytics/ultralytics 代码 import matplotlib.pyplot as plt from ultralytics import YOLO from PIL import Image import cv2model YOLO(../ultralytics/yolov8n.pt)# print(model…

代码随想录算法训练营第四十八天【动态规划part09】 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 当前房屋偷与不偷取决于前一个房屋是否被偷了 动规五部曲 确定dp数组及其下标含义&#xff1a;考虑下标i&#xff08;包括i&#xff09…

Nginx(无法解析PHP网页如何解决?FPM解决你的烦恼!)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

新建的springboot项目中application.xml没有绿色小叶子(不可用)

经常有朋友会遇到新建了一个springboot项目&#xff0c;发现为啥我创建的application.xml配置文件不是绿色的&#xff1f;&#xff1f;&#xff1f; 下面教大家如何解决&#xff0c;这也是博主在做测试的时候遇到的&#xff1a; 将当前位置application.xml删掉&#xff0c;重新…

RF实现数据驱动DDT

场景 在自动化测试框架中&#xff0c;数据驱动的意思指定的是测试用例或者说测试套件是由外部数据集合来驱动的框架。这里说的数据集可以是任何类型的数据文件比如xls&#xff0c;xlsx&#xff0c;csv等等。它的核心的思想就是数据和测试代码分离&#xff0c;及时当测试数据发…

【同济大学主办】第七届先进算法与控制工程国际学术会议(ICAACE 2024)

第七届先进算法与控制工程国际学术会议&#xff08;ICAACE 2024&#xff09; 2024 7th International Conference on Advanced Algorithms and Control Engineering 第七届先进算法与控制工程国际学术会议&#xff08;ICAACE 2024&#xff09;定于2024年1月26-28日在中国上…

虽然在不同设备上会出现同样的原神错误代码9907,但解决办法因设备而异

你是不是很享受在原神(Genshin Impact)中的神奇旅程,但错误代码9907出现了?与PS4控制台中全面讨论PS4的错误CE-34878-0不同,本文关注的是原神错误本身。本文不仅讨论了这个错误背后的原因,还讨论了每种类型设备的具体解决方案。 在Microsoft Windows/PC上修复错误代码99…

深入学习redis-基于Jedis通过客户端操作Redis

目录 redis客户端&#xff08;JAVA&#xff09; 配置 引入依赖 建立连接 常用命令实现 get/set exists/del keys expire和ttl type 字符串&#xff08;String&#xff09; mget和mset getrange和setrange append incr和decr 列表&#xff08;list&#xff09; …

自动化测试 —— 如何优雅实现方法的依赖!

在 seldom 3.4.0 版本实现了该功能。 在复杂的测试场景中&#xff0c;常常会存在用例依赖&#xff0c;以一个接口自动化平台为例&#xff0c;依赖关系&#xff1a; 创建用例 --> 创建模块 --> 创建项目 --> 登录。 用例依赖的问题 •用例的依赖对于的执行顺序有严格…