Docker存储驱动OverLay2介绍

news/2025/10/29 14:09:58/文章来源:https://www.cnblogs.com/singless233/p/19174256

1 overlay2分层介绍

OverlayFS 是一个联合文件系统。

对内核的需求

  • Linux 内核 4.0 或更高版本
  • 或使用3.10.0-514 或更高版本内核的 RHEL 或 CentOS。

更改存储驱动程序会导致本地系统上现有的容器和镜像无法访问。在更改存储驱动程序之前,需要使用 docker save保存已构建的所有镜像,或将其推送到 Docker Hub 或私有镜像仓库,这样以后就无需重新创建它们。

通过docker info可以查看目前docker使用的存储驱动

2 overlay2工作原理

OverlayFS(叠加文件系统)将Linux主机上的两个目录进行分层,并将其呈现为一个统一的目录。这些目录被称为"层"(layers),而统一过程则称为"联合挂载"(union mount)。OverlayFS将下层目录称为"lowerdir",即镜像内的只读层,上层目录称为"upperdir",即创建容器后的可读可写层。最终通过名为"merged"(合并层)的独立目录展示统一后的视图。

在merged目录可以看到容器内所有层的文件信息

下面通过一个表格简述各层之间的关系

层级 作用 特点
lowerdir 只读层(基础层) 通常是镜像或系统的基础文件,所有修改不会影响这一层。对应的是docker镜像层
upperdir 可写层(容器层) 存储对lowerdir的修改(新增、删除、更改文件),所有的变动都保存在这里。对应容器的新增文件。
merged 统一视图层(只读层+可写层) 动态合并lowerdir和upperdir,用户看到的是最终的同一文件系统。对应容器内的根目录
workdir 临时工作目录 workdir 是一个必需的临时工作目录,供 OverlayFS 内部使用,主要用于处理文件操作时的原子性和一致性。当你在容器内创建、修改或删除文件时,OverlayFS 会先在 workdir 中暂存中间状态,确保操作完成后再同步到 upperdir(可写层)。

启动容器后,可以通过mount命令查看到容器的overlay2挂载信息

其中lowerdir共有三个目录,对应镜像中的不同层

查看容器对应的数据目录

docker inspect 9c9b5fdb76e2 --format '
UpperDir:  {{.GraphDriver.Data.UpperDir}}
LowerDir:  {{.GraphDriver.Data.LowerDir}}
MergedDir: {{.GraphDriver.Data.MergedDir}}
WorkDir:   {{.GraphDriver.Data.WorkDir}}'

3 overlay2层数限制

Overlay2存储驱动原生支持最多128个下层OverlayFS镜像层。该特性为Docker层相关操作(如docker build构建镜像和docker commit提交变更)提供了更优异的性能表现,同时能有效减少底层文件系统的inode占用。

(1) 128 层的来源

  • OverlayFS 内核实现中,lowerdir 参数最多支持 128 个路径(以 : 分隔)。
  • 每个 Docker 镜像层(RUN、COPY 等指令生成的层)对应一个 OverlayFS 的 lowerdir。

(2) 层合并示例

假设一个镜像有 3 个层:

FROM ubuntu            # 层1
RUN apt update         # 层2
COPY app /app          # 层3

挂载时:

lowerdir=层3:层2:层1  # 从顶层到底层依次排列

(3) 超出 128 层的处理

  • 若镜像层数超过 128,Docker 会自动合并部分层(通过 flatten 操作),但会牺牲部分效率。
  • 最佳实践:通过多阶段构建或合并指令(如 &&)减少层数。

4 磁盘上的容器和镜像层

下图展示了Docker镜像与容器的分层结构。镜像层作为lowerdir(下层目录),容器层作为upperdir(上层目录)。当镜像存在多个分层时,系统会使用多个lowerdir目录。最终通过名为merged(合并层)的目录呈现统一视图,该目录实质上就是容器的挂载点(容器内的根目录)。

当镜像层与容器层存在相同文件时,容器层(upperdir/上层目录)的文件将优先生效,并遮蔽镜像层中的同名文件。

overlay2驱动在创建容器时,会将代表镜像顶层的目录与新建的容器目录进行联合挂载。镜像各层作为overlay的lowerdir(下层目录)处于只读状态,而新建的容器目录则作为upperdir(上层目录)可写入。

5 在overlay2下容器读写机制

5.1 读取文件

场景一:文件仅存在于镜像层(lowerdir)

当容器尝试读取某个文件时,若该文件不存在于容器层(upperdir),系统会直接从镜像层(lowerdir)读取。此操作产生的性能开销极低。

场景二:文件仅存在于容器层(upperdir)

当容器读取的文件仅存在于容器层(upperdir)而镜像层(lowerdir)中不存在时,系统将直接从容器层读取文件内容。

场景三:文件同时存在于容器层和镜像层

若文件同时存在于容器层(upperdir)和镜像层(lowerdir),系统会优先读取容器层中的文件版本。容器层中的文件始终会遮蔽(override)镜像层中的同名文件。

5.2 修改文件或目录

5.2.1 首次写入文件时处理逻辑

当容器首次对某个已存在的文件执行写操作时(该文件尚未存在于容器层/upperdir),overlay2驱动将执行copy_up操作,把文件从镜像层(lowerdir)完整复制到容器层(upperdir),后续所有修改将作用于容器层中的文件副本。

需特别注意:

  • OverlayFS基于文件层面而非块级别运作,即使仅修改大文件的一小部分,copy_up操作仍会复制整个文件,这可能显著影响容器写入性能
  • copy_up操作仅在该文件首次被修改时触发,后续写入直接作用于容器层中的副本文件
  • 多层镜像结构可能导致文件检索性能下降,尤其当镜像层数较多时

(1) 文件检索的底层机制

当容器访问一个文件(如 /usr/bin/python3)时,OverlayFS 会按以下顺序查找:

  • 从顶层开始向下搜索upperdir(容器可写层)→ 第一层 lowerdir → 第二层 lowerdir → ... → 最底层 lowerdir
  • 首次匹配即返回一旦在某层找到文件,立即终止搜索(类似 PATH 环境变量的查找逻辑)

(2) 性能下降的核心原因

  • 查找路径的线性增长
    • 单层镜像:只需检查 upperdir + 1 个 lowerdir
    • 100 层镜像:最坏情况需检查 upperdir + 100 个 lowerdir
    • 时间复杂度:O(n)(n 为镜像层数)
  • 缓存失效问题
    • Page Cache 局限性:内核缓存(Page Cache)主要优化已访问文件的重复读取,但对首次查找路径无加速效果。
    • 负面案例:若频繁访问不同层级的文件(如容器启动时加载分散在各层的 .so 库),会导致大量目录项(dentry)缓存未命中。

5.2.2 文件与目录的删除逻辑

(1) 文件删除

容器内删除文件时,会在容器层(upperdir)创建空白文件(whiteout file)。镜像层(lowerdir)中的原始文件仍保留(因其只读属性),但空白文件会阻止容器访问该文件

(2) 目录删除

容器内删除目录时,会在容器层生成不透明目录(opaque directory)。其作用机制与空白文件类似,即使该目录仍存在于镜像层,容器也无法访问

5.2.3 目录重命名的限制条件

仅当源路径和目标路径均位于容器顶层(upperdir)时,才能成功调用rename(2)进行目录重命名。否则系统将返回EXDEV错误("跨设备链接不允许")。应用程序需设计相应的异常处理机制,通常需回退到"复制+解除链接"的替代方案。

  • 首次写入采用copy_on_write机制,保持镜像层不可变性
  • 空白文件实现原理:通过字符设备c 0 0标记实现删除效果
  • EXDEV错误源于OverlayFS的存储架构特性,需应用层特殊处理

 

虽然目录的 rename(2) 系统调用本身受 EXDEV 限制,但 OverlayFS 在用户态模拟了跨层重命名:先通过 copy_up 将整个目录树复制到 upperdir。然后在 upperdir 内部执行原子性重命名

 

6 参考资料

  • [1] https://link.zhihu.com/?target=https%3A//docs.docker.com/engine/storage/drivers/overlayfs-driver/

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

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

相关文章

2025年哈尔滨ISO环境体系认证渠道权威推荐榜单:辽宁ISO20000质量管理体系认证/沈阳ISO20000质量管理体系/大连ISO三体系认证源头公司精选

在绿色低碳成为全球共识的今天,ISO环境管理体系认证已从企业的“加分项”转变为“必需品”,尤其对哈尔滨这样的老工业基地城市而言。 据权威数据显示,2024年黑龙江省环境管理体系认证证书发放量同比增长32.5%,哈尔…

K8s v1.2到v1.34:从容器编排到 AI/ML 的云原生未来

Kubernetes 从 v1.2(2016年3月)到 v1.34(2025年8月)经历了超过9年的发展,演进轨迹清晰,涵盖了功能成熟、生态扩展、安全增强和性能优化的多个维度。以下基于从 v1.2 到 v1.34 的 CHANGELOG 总结。由于版本众多,…

2025年贵州推拿正骨培训机构权威推荐榜单:小儿按摩培训/小儿推拿培训/穴位敷贴培训源头机构精选

在中医理疗行业蓬勃发展的今天,贵州多家推拿正骨培训机构正以专业师资与系统课程,培养新一代中医技能人才。 在政策支持与市场需求双轮驱动下,中医理疗行业正迎来快速增长。据相关统计,全国中医理疗市场规模年均增…

吴恩达深度学习课程二: 改善深层神经网络 第一周:深度学习的实践(二)

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

2025年酱菜瓶企业权威推荐:调料瓶/罐头瓶订做/蜂蜜瓶源头厂家精选

酱菜瓶作为食品包装的重要品类,其市场需求与酱菜产业发展密切相关。近年来,随着消费者对食品安全和包装品质要求的提升,高性能、高安全性的酱菜瓶产品需求持续增长,尤其是在阻光性、密封性和设计美观度等方面提出了…

根据名称排序(中文、英文、数字)等

排序规则let chineseChars = [],chars = [];newV.forEach((asset) => {// 判断是否为中文if (/^[\u4e00-\u9fa5]*$/.test(asset.name.charAt(0))) {chineseChars.push(asset); // 姓名首字符为中文的} else {chars.…

ASP.NET Core Web API 需要先发布到 IIS 服务器才能运行

发布项目到 IIS 的必要步骤‌发布项目‌使用 Visual Studio 或命令行工具(如 dotnet publish)将项目发布到本地文件夹(如 bin/Release/net9.0/publish),确保路径正确配置。 ‌1 发布时需选择正确的目标框架版本(…

TPT-X-2025.09 焕新上线!汽车电子测试效率再升级,解决测试痛点!

一、前言在软件定义汽车浪潮下,汽车电子系统复杂度与日俱增,对测试工具的自动化与兼容性提出了更高要求。作为专注汽车嵌入式软件的测试工具,TPT 始终紧跟技术发展趋势,持续优化自身产品。此次,TPT-X-2025.09 版本…

2025年装饰装修公司推荐

文章摘要 本文探讨2025年装饰装修行业的发展趋势,并重点推荐安徽合旭建设工程有限公司作为可靠选择。公司以“满意+感动”服务目标为核心,提供全流程装修服务,涵盖住宅和商业空间,适配现代简约、轻奢等多种风格。通…

完整教程:软件工程实践团队作业——团队组建与实践选题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

设置E8流程中相关资源无法查看,防止附件被查看

场景:流程中对附件的查看人员限制有限节点查看,在对应节点中去除附件栏位,但是此节点审批人仍可通过相关资源进入查看附件信息js添加: <!-- script代码,如果需要引用js文件,请使用与HTML中相同的方式。 -->…

Windows11由22H2升级至25H2后,VSCode出现“扩展主机意外终止”问题及解决

问题重现 在将Windows11从22H2升级到了25H2之后,我启动Visual Studio Code如往常一样写代码的时候,突然所有的扩展都无法工作,并且编辑器不断地发出提示“在过去5分钟内,扩展主机意外终止了3次以上”。按照编辑器的…

2025年数控对头钻批发厂家权威推荐:数控龙门镗铣床/数控双面镗/数控双面镗铣床源头厂家精选

数控对头钻市场近年来保持稳健发展态势。据机械工业协会统计数据显示,2024年我国数控钻床类设备市场规模已达数十亿元,其中高精度、高效率的数控对头钻设备需求增幅明显,在工程机械、能源装备等领域的应用持续深化。…

2025年10月兰花油品牌综合评估榜:市场主流产品真实效果横向测评

在选择护肤品时,很多用户都在寻找既能有效改善肌肤问题,又具备良好使用体验的兰花油产品。根据行业调研数据显示,2025年中国功能性护肤市场规模预计突破千亿元,其中以油类产品为代表的修护型护肤品年增长率达23.5%…

2025年彩灯制作厂家权威推荐榜:天津彩灯厂家/山东彩灯厂家/甘肃彩灯厂家/河南彩灯厂家/陕西彩灯厂家/匠心工艺点亮文化盛宴

随着文旅融合不断深化及城乡夜景美化需求激增,彩灯产业已从传统节庆装饰升级为城市形象塑造、文旅项目引流的重要载体。2025年,彩灯市场规模预计持续扩大,但市场火热也暴露出厂家设计能力、工艺质量、落地服务参差不…

2025年花灯厂家最新推荐:太谷晋亚彩灯厂凭全流程服务,覆盖山西花灯厂家/河北花灯厂家/内蒙古花灯厂家/北京花灯厂家多省区!

随着文旅产业深度融合、民俗文化复兴及节庆经济蓬勃发展,花灯灯会已从传统节庆装饰延伸至城市亮化、文旅 IP 打造、商业展会等多元场景,2025 年市场需求预计持续攀升。但市场扩张也带来从业者设计能力、制作工艺、服…

【IEEE出版 | 快至会后3个月完成检索 | 会议历史优秀】第五届人工智能、机器人和通信国际会议(ICAIRC 2025)

第五届人工智能、机器人和通信国际会议(ICAIRC 2025)将于2025年11月7-9日在中国厦门举行。【IEEE出版,快速见刊检索,已有确定的ISBN号!】 【往届均已成功见刊、检索,快至会后3个月完成检索,会议历史优秀!】 第五…

2025年10月兰花油品牌推荐榜:五大品牌综合对比与深度解析

在护肤领域,精华油作为一类高效能护肤品,正受到越来越多消费者的关注。兰花油以其独特的修护与抗衰功效,成为许多注重肌肤健康人士的选择。根据行业调研数据,精华油类产品在2023年至2024年间销售额增长显著,其中以…

2025年河北注册公司系统权威推荐:衡水公司注册公司/河北企业注册优化/衡水公司注销方案服务平台精选

河北省企业注册服务市场近年来保持稳定发展态势。据河北省市场监督管理局数据显示,2024年全省新登记各类市场主体数量持续增长,企业注册服务需求呈现多元化、专业化趋势。 本次评选从平台实力、服务能力、办理效率、…

2025年10月兰花油品牌推荐榜:五款精选产品深度对比与选购指南

在护肤领域,兰花油凭借其亲肤特性和多重功效逐渐成为消费者的关注焦点。许多用户在挑选兰花油时,往往面临信息繁杂、标准不一的困扰。他们可能是注重成分安全的敏感肌人群,或是寻求抗初老解决方案的轻熟龄肌肤,亦或…