【docker】UnionFS联合操作系统

Linux 的 Namespace、CGroups 和 UnionFS 三大技术支撑了 Docker 的实现。

一、为什么需要联合文件系统?

在传统操作系统中,每个文件系统都是独立的孤岛。但当我们需要:

  • 合并多个目录的内容

  • 保持基础系统不变的同时进行修改

  • 高效共享重复文件内容

UnionFS应运而生!它通过文件系统堆叠技术,将多个目录(通常是只读的)合并成一个统一的视图。

二、UnionFS的核心魔法原理

接下来我们用一个例子理解下UnionFS文件系统
创建以下目录
注意,layer1 和 layer2 目录中各有一个文件 file1,但文件内容不同。
  • layer1 和 layer2:模拟 Docker镜像的只读层(类似刻录的光盘,内容不可变)

  • upperlayer:模拟 容器的可写层(像透明便利贴,记录修改)

  • mountedfs:联合挂载点(展示"合并后的世界")

使用基本语法挂载文件系统:
说明:-t aufs:指定文件系统类型为 aufs。
-o br:upperlayer:layer1:layer2:-o 用于指定挂载选项。br 是 aufs 的选项,表示指定分支(branches)。upperlayer:layer1:layer2 是分支的具体路径,upperlayer 是上层目录,通常是可写
层。layer1 和 layer2 是只读层,通常是基础镜像层或依赖层。多个分支用冒号:分隔。
none:表示没有实际的设备文件,因为 aufs 是一个虚拟文件系统。
mountedfs:挂载点目录,即文件系统挂载的目标路径。
检查挂载点 mountedfs,可以看到其内容就是 layer1 和 layer2 的并集,注意 file1 的内容:
可以看到,挂载点目录的 file1 显示的是 layer1 中 file1 的内容,而没有显示 layer2 中 file1 的内容。 这是由在设置 AUFS 文件系统的分支(即层)的时候 upperlayer:layer1:layer2 选项所决定的,layer1 在前,AUFS 的优先级是从左到右的,这就意味着,如果一个文件存在于两个层中,则 AUFS 文件 系统中显示的版本将是最左侧层的版本,理解这一点非常重要。
接下来,我们在挂载点目录创建一个内容为"new content for file4"的新文件 file4:
file4 实际是创建在了 upperlayer 这一可写层的。
继续,如果删除挂载点目录文件 file1,会发生什么情况呢?

删除file1,挂载点mountedfs中的file1尽管被删除了,实际在 upperlayer 生成 隐藏标记文件( .wh.file1)(告诉系统:虽然底层有file1,但请假装看不见),layer1/file1 和 layer2/file1 完好无损。这样,file1 文件不会显示在最终挂载的文件系统中。

如果我们在挂载点目录重新创建 file1 时(注意文件内容和前面删除的并不一样),那么

这个控制文件会被移除掉,新的 file1 所在目录是在 upperlayer 中。

三、总结

当运行容器时:

  1. 在只读镜像层之上添加可写层

  2. 所有运行时修改发生在可写层

  3. 容器删除 → 可写层消失 → 镜像保持纯净

UnionFS的核心优势其实围绕三个关键词:共享、隔离、效率。具体体现在:

1 分层机制节省存储空间(多个容器共享基础镜像层)

2 写时复制保证安全性(原始镜像永不修改)

3 联合挂载实现高效部署(无需复制完整文件系统)

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

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

相关文章

CTF-XXE 漏洞解题思路总结

一、XXE 漏洞简介XXE (XML External Entity) 漏洞允许攻击者通过构造恶意的 XML 输入,强迫服务器的 XML 解析器执行非预期的操作。在 CTF 场景中,最常见的利用方式是让解析器读取服务器上的敏感文件,并将其内容返回给攻击者。二、核心攻击载荷…

GitLab:一站式 DevOps 平台的全方位解析

GitLab:一站式 DevOps 平台的全方位解析 在当今数字化时代,软件研发的效率与质量直接决定企业的市场竞争力。GitLab 作为全球领先的 DevOps 平台,凭借 “从构思到部署” 的全流程管理能力,已成为无数企业加速软件交付的核心工具。…

Flink富函数:一种更灵活、可扩展的方式来定义数据流的处理逻辑

本文重点 Flink中的富函数类是一组用于处理数据流的函数接口和实现类。富函数类提供了一种更灵活和可扩展的方式来定义数据流的处理逻辑。 富函数类 富函数类是DataStream API提供的一个函数类的接口,所有的Flink函数类都有其Rich版本。富函数类一般是以抽象类的形式出现的。…

【STM32】HAL库中的实现(四):RTC (实时时钟)

🕒HAL库中的实现:RTC(Real-Time Clock)实时时钟RTC 是 STM32 的低功耗实时时钟模块,常用于: 实时时间维护(年月日时分秒)定时唤醒日志时间戳闹钟功能RTC(实时时钟&#x…

Pauli 矩阵指数函数展开为显式矩阵 e^A -> B

要展开表达式 为普通矩阵,其中 是 Pauli 矩阵, 是单位向量, 是实数。以下是详细推导步骤:1. Pauli 矩阵的性质Pauli 矩阵定义为:它们满足以下关系:​其中 是 Kronecker delta,​ 是 Levi-…

【Algorithm | 0x03 搜索与图论】DFS

DFS基础知识典型例题例1:n皇后问题例2:拍照例3:理发基础知识 核心原理:一条路走到黑 示意图:其含义表示,在这个图中顶层是第0层,也就是后面dfs的入口,一般从dfs(0)开始操作。 模版&a…

Redis的数据过期策略有哪些?

Redis内部通过两种主要策略来处理过期的Key: 惰性删除 惰性删除:顾明思议并不是在TTL到期后就立刻删除,而是在访问一个key的时候,Redis会先检查这个键是否过期。如果过期,就删除它,然后返回nil。 这种方式非…

水库雨水情测报和大坝安全监测系统解决方案

一、方案背景 在全球气候变化和极端天气频发的背景下,水库作为重要的水利设施,承担着防洪、供水、灌溉、发电等多重功能。然而,由于水库蓄水量巨大,一旦发生溃坝或运行异常,将对下游地区造成不可估量的生命财产损失。因…

BFS 和 DFS 编程思想、框架、技巧及经典例题总结

BFS 和 DFS 编程思想、框架、技巧及经典例题总结 一、核心编程思想 BFS(广度优先搜索) 核心思想:以「层次遍历」为核心,从起点出发,优先探索距离起点最近的节点,逐层扩散遍历。本质:通过「队列」…

【面试场景题】日志去重与统计系统设计

文章目录题目场景描述要求问题考察点解答思考一、核心解决方案(基础版,单节点32GB内存、10台节点)1. 整体架构选型2. 关键步骤详解(1)数据分片:解决“数据量大,单节点处理不了”的问题&#xff…

【Day 16】Linux-性能查看

目录 一、Stress系统压力测试工具 二、性能查看 (一)查看CPU # nproc # lscpu # top # uptime # mpstat 数字1 数字2 (二)查看内存 # dmidecode -t memory | less # free -h # …

【ICCV2017】Deformable Convolutional Networks

一、摘要尽管卷积神经网络(CNN)在视觉识别任务上取得巨大成功,但其固有的固定几何结构(固定卷积采样网格、固定池化窗口、固定 RoI 划分)严重限制了对未知几何变换(尺度、姿态、形变、视角变化)…

echarts在前后端分离项目中的实践与应用

目录 一、ECharts简介 二、后端数据接口设计 三、数据结构设计 1. 柱状图数据结构 2. 饼图数据结构 四、后端实现要点 五、前端ECharts配置解析 1. 柱状图配置 2. 饼图配置 六、最佳实践建议 七、总结 一、ECharts简介 ECharts是百度开源的一个基于JavaScript的可视…

SQL 四大语言分类详解:DDL、DML、DCL、DQL

SQL(结构化查询语言)通常被分为四种主要类型,每种类型负责不同的数据库操作。下面我将详细介绍这四类SQL语言的语法和用途。一、DDL (Data Definition Language) 数据定义语言功能:定义和管理数据库对象结构(表、视图、…

ESP-idf框架下的HTTP服务器\HTML 485温湿度采集并长传

项目描述:本项目采用485采集温湿度以及电压电流等,485模块分别为下图,串口转485模块采用自动收发模块,ESP32工作在AP热点模式,通过手机连接esp32的热点来和esp进行数据通讯,使用esp32作为HTTP服务器缺陷:项目的最终HTML页面代码可发给AI让其写注释#include "freertos/Free…

雅江工程解锁墨脱秘境:基础条件全展示(区位、地震、景点、天气)

目录 前言 一、区位信息 1、空间位置 2、区位介绍 二、地震信息 1、历史地震信息 2、5.0级以上大地震 三、景点信息 1、景点列表分布 2、4A级以上景点 四、天气信息 1、天气实况 2、天气应对挑战 五、总结 前言 相信最近大家对雅江电站的超级大工程项目应该有所耳…

​​机器学习贝叶斯算法

​​一、引言​​在当今机器学习领域,贝叶斯算法犹如一颗璀璨的明星。你是否想过,垃圾邮件过滤系统是如何准确判断一封邮件是否为垃圾邮件的呢?这背后可能就有贝叶斯算法的功劳。今天,我们就一同走进贝叶斯算法的世界,…

Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)

以【5 Stage pipeline CPU】搜索图片,选取5幅有代表性的图列举如下,并结合Chisel代码进行理解和点评。 图1:原文链接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 点评:黑色的部分…

Docker容器中文PDF生成解决方案

在Docker容器中生成包含中文内容的PDF文件时,经常遇到中文字符显示为方块或乱码的问题。本文将详细介绍如何在Docker环境中配置中文字体支持,实现完美的中文PDF生成。 问题现象 当使用wkhtmltopdf、Puppeteer或其他PDF生成工具时: 中文字符…

2.java集合,线程面试题(已实践,目前已找到工作)

1线程的创建方式 继承Thread类实现Runnable接口实现Callable接口 2.这三种方式在项目中的使用有哪些,一般都是怎么用的 继承thread类实现线程的方式通过实现run方法来实现线程,通过run进行线程的启用实现runnable方法实现run方法,然后通过thr…