从 Docker OverlayFS 到 OCI 镜像格式

news/2026/1/21 0:11:57/文章来源:https://www.cnblogs.com/uran0sh/p/19509123

在理解 Docker 镜像与容器的存储实现时,UnionFS / OverlayFSOCI 镜像格式 是两条必须打通的主线。本文将从 Docker 在本机的实际存储目录出发,逐步拆解:

  • Docker 使用的是哪种 UnionFS
  • 镜像层在 OverlayFS 中如何映射
  • OCI 镜像在磁盘上到底长什么样

Docker 使用的 UnionFS 类型

Docker 默认的数据目录位于 /var/lib/docker。通过直接查看该目录,可以快速判断当前 Docker 使用的 UnionFS 实现:

$ sudo ls /var/lib/docker
buildkit  containers  engine-id  image  network  overlay2  plugins  runtimes  swarm  tmp  volumes

可以看到目录中存在 overlay2,这表明当前 Docker 使用的是 OverlayFS(overlay2 driver)


拉取镜像:从逻辑概念到物理存储

拉取一个最简单的镜像作为示例:

$ docker pull busybox:latest
latest: Pulling from library/busybox
e59838ecfec5: Pull complete 
Digest: sha256:2383baad1860bbe9d8a7a843775048fd07d8afe292b94bd876df64a69aae7cb1
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

busybox 镜像非常轻量,通常只有 一层 filesystem layer,非常适合作为理解镜像结构的起点。

需要注意的是:

所有 Docker 镜像本质上都需要符合 OCI Image Specification。


OCI 镜像的逻辑结构

一个 OCI 镜像在逻辑上由以下几部分组成:

  • Manifest:描述镜像由哪些层(layers)组成
  • Config:记录运行时配置(Entrypoint、Env、Cmd 等)
  • Layers:真正的文件系统内容(tar 包)

下图展示了一个典型的 OCI 镜像结构
Pasted image 20260120094756


OverlayFS 的工作模型

Docker 在运行容器时,会将 OCI 镜像层映射到 OverlayFS 中。OverlayFS 的核心概念如下:

OverlayFS 架构示意图
Pasted image 20260120095803

  • lowerdir:只读的镜像层(image layers)
  • upperdir:容器的可写层(container diff)
  • merged:联合挂载点,对容器进程可见的根文件系统

从 docker inspect 看 OverlayFS 的真实路径

通过 docker inspect,可以直接看到一个镜像或容器在 OverlayFS 中的实际映射关系:

$ docker inspect redis:latest

关键字段位于 GraphDriver

"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/.../diff:...","MergedDir": "/var/lib/docker/overlay2/.../merged","UpperDir": "/var/lib/docker/overlay2/.../diff","WorkDir": "/var/lib/docker/overlay2/.../work"},"Name": "overlay2"
}

含义非常直接:

  • LowerDir:由多个镜像层的 diff 目录串联而成
  • UpperDir:当前容器的写层
  • MergedDir:最终挂载给容器使用的根目录
  • WorkDir:OverlayFS 内部使用的工作目录

同时,RootFS.Layers 中记录的 sha256 值,与 LowerDir 中的各层一一对应。


镜像层在磁盘上的样子

随便查看一个 LowerDir 对应的目录:

$ sudo ls /var/lib/docker/overlay2/17e6bb7aa1d267a6f07b37c708827d7346ef97b50661f46b21cdc2de032fcaf1/diff
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

可以看到,这实际上就是一个 Linux 根文件系统的子集

每一层镜像,都是一次对根文件系统的“增量修改”。


OCI 镜像的物理格式:tar + blobs

OCI 镜像本质上是一个 tar 文件格式。我们可以直接将镜像保存并解包:

$ docker save redis:latest -o redis-latest.tar
$ mkdir redis-latest
$ tar xvf redis-latest.tar -C redis-latest/

解包后的目录结构如下:

blobs/
index.json
manifest.json
oci-layout
repositories

关键文件说明

  • manifest.json
    描述镜像由哪些 layer 组成,结构与 docker inspect 中的信息高度一致
  • index.json
    OCI 镜像索引文件,支持多架构镜像(manifest list)
  • oci-layout
    标识这是一个 OCI layout 格式的镜像
  • repositories
    Docker 历史遗留文件,记录镜像名到 image ID 的映射关系

blobs/sha256:元数据与真实数据

真正的内容位于 blobs/sha256/ 目录下:

  • *.json:镜像配置或 layer 元数据

  • *.tar:实际的文件系统 layer 内容

通过 file 命令可以快速区分:

$ for blob in blobs/sha256/*; doecho "$(basename $blob): $(file $blob | cut -d: -f2)"
done

输出结果清楚地表明:

  • POSIX tar archive:文件系统层
  • JSON data:配置或描述信息

小结

从这次拆解可以看到:

  1. Docker 使用 OverlayFS(overlay2)将多个镜像层联合成容器根文件系统
  2. 每个镜像层在磁盘上都是一个独立的 filesystem diff
  3. OCI 镜像本质是由 tar + JSON 描述文件组成的标准化格式
  4. Docker 的运行时视图(OverlayFS)与分发视图(OCI 镜像)是同一数据的两种表达

理解这两层模型,有助于深入分析:

  • 镜像体积优化
  • Copy-on-Write 行为
  • 容器 I/O 与性能问题
  • 容器运行时(containerd / CRI-O)的实现细节

参考

  • OCI Image Specification
    https://specs.opencontainers.org/image-spec/

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

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

相关文章

收藏!大语言模型(LLM)核心原理与医疗垂直领域应用全解析

本文深度拆解大语言模型(LLM)的底层逻辑,涵盖大规模预训练、尺度定律、Next Token Prediction等核心技术点,结合实操视角补充基础认知。重点聚焦医疗垂直大模型的测试体系与优化路径,通过医学知识理解、跨场景应用、临…

springboot147基于JavaEE的服饰服装商城网站的设计与实现

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 具体实现截图 摘要 随着电子商务的快速发展,服饰服装商城网站成为消费者在线购物的主要渠道之一。基于JavaEE技术栈的Spri…

吸附能与结合能的理解和计算

在计算化学与材料科学中,能量差是理解反应机理与结构稳定性的核心语言。尤其是"吸附能(AdsorptionEnergy)"与"结合能(BindingEnergy)",它们都描述"体系由分离态到结合态的能量变化",却各自揭示了不同层次的化学…

大数据领域存算分离:推动数据创新

大数据领域存算分离:推动数据创新 关键词:大数据、存算分离、数据存储、数据计算、数据创新 摘要:本文聚焦大数据领域的存算分离技术,详细介绍了其核心概念、原理架构、算法实现步骤等内容。通过生动形象的比喻和具体的代码实例,让读者轻松理解存算分离的技术要点。同时,…

从巨额亏损中提炼出的3条颠覆性交易心法

引言:你是否也在用“猜谜”的方式炒股?你是否也曾在股市的海洋中感到迷茫?每天被海量的信息淹没,反复追涨杀跌,最终却发现账户数字不增反减。我们总想找到那个能够精准预测市场的“水晶球”,但现实往往是&a…

机器学习 - 提升模型性能

摘要:本文系统介绍了提升机器学习模型性能的集成学习技术,重点分析了Boosting方法及其实现。文章详细阐述了特征工程、超参数调优、正则化等关键技术,并通过Python代码示例展示了装袋决策树(77%准确率)、随机森林&…

2026必备!本科生毕业论文写作软件TOP9测评

2026必备!本科生毕业论文写作软件TOP9测评 2026年本科生论文写作软件测评:为何需要这份榜单? 随着高校教育对学术规范要求的不断提升,本科生在撰写毕业论文过程中面临越来越多挑战。从选题构思到文献综述,从内容撰写到…

超详细版:ARM64虚拟化技术在云服务中的实现

ARM64虚拟化:云服务背后的高效引擎你有没有想过,当你在AWS上启动一台A1实例,或是在华为云创建一个基于鲲鹏的虚拟机时,底层究竟发生了什么?为什么越来越多的云厂商开始从x86转向ARM架构?答案就藏在ARM64虚拟…

springboot148基于javaweb技术与SSM框架的智慧商城网上购物电商平台的设计与实现

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 智慧商城网上购物电商平台基于SpringBoot 1.4.8框架与JavaWeb技术,结合SSM(SpringSpringMVCMy…

计算机毕业设计springboot基于web的流浪动物信息管理系统 基于SpringBoot的流浪宠物救助与领养平台 Web端流浪猫狗信息追踪及领养服务系统

计算机毕业设计springboot基于web的流浪动物信息管理系统285i7752 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。当城市化的脚步越来越快,街巷里出现的流浪动物也在…

springboot149基于Javaweb的高校图书馆图书借阅管理系统的设计与实现

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 高校图书馆作为学术资源的核心载体,其信息化管理水平直接影响师生获取知识的效率。基于SpringBoot 1.4.9框…

母线弧光保护装置在中低压开关柜中应用

母线弧光保护装置概述母线弧光保护装置是一种用于检测和快速切除中低压开关柜内部弧光故障的保护设备。弧光故障通常由绝缘击穿、接触不良或操作失误引起,可能引发高温、高压和爆炸,对设备和人员安全构成严重威胁。该装置通过检测弧光信号和电流突变&…

莫凡电视:全国地方台全覆盖!流畅播放技术解析

各位影视与电视技术爱好者,今天分享莫凡电视的核心优势——聚焦全国地方台全量覆盖与播放流畅度,技术点扎实易懂,适配智能电视、机顶盒等终端,完美满足不同地区用户观看本地频道的需求。 地方台接收核心采用多协议解码引擎&#…

产品经理值得关注的 AI 工具盘点:从“写需求”到“直接交付”

过去几年,AI 在产品领域的作用主要集中在辅助思考:写 PRD、做竞品分析、优化文案。但一个明显的变化正在发生——AI 开始进入真正的交付环节,直接影响产品从想法到落地的效率。 对产品经理来说,这意味着一个新的能力边界正在被打…

基于OpenPLC的产线控制实战案例详解

用树莓派OpenPLC重构产线控制:一个工业自动化工程师的实战手记最近接手了一个老产线升级项目,客户原用的是三菱FX3U PLC,配了个触摸屏,运行了快八年。系统稳定但扩展性极差——想加两个传感器?得换PLC模块、改接线、重…

注意力机制:Transformer模型的深入解析

一、 引言自从Google于2017年提出Transformer模型以来,它已经成为深度学习领域的基石,尤其是在自然语言处理(NLP)和计算机视觉(CV)领域取得了显著的成果。Transformer通过其核心组件—注意力机制—革新了神…

电影解说详细教程:从「一条视频」到「持续更新」

很多人第一次做电影解说,都会经历一个相似的过程:第一条视频做得很认真,从选片到剪辑反复打磨,虽然播放量未必高,但至少“做出来了”。可问题也往往从这里开始——第二条、第三条迟迟没动静,更新开始断断续…

电脑怎么通过一个网卡访问多个网段?一招解决

一、案例简介在自动化数据采集中我们经常会遇到这样一个问题,由于设备前期导入没有进行系统性规划IP地址,导致设备不同IP网段,导致如果需要统一采集设备数据,如果通过增加网卡解决问题,这样不仅成本过高,同时电脑…

对话管理在智能车载系统中的应用实践

对话管理在智能车载系统中的应用实践:从痛点到落地的全链路解析 引言:为什么车载系统需要“会聊天”的对话管理? 1.1 车载场景的“致命痛点”:安全与效率的矛盾 开车时,你有没有过这样的经历? 想导航到机场,却要盯着屏幕点3次菜单、输入5个汉字,眼睛离开路面2秒; 想…

【Da】媒体、快编面板

--本篇导航--媒体面板快编面板媒体面板 顾名思义,就是导入各种视频、图片、音频等素材的。智能媒体夹 可支持单个文件、Shift多个文件、文件夹的拖入。可对素材做各种条件筛选。共享媒体夹场景剪切探测 可以自动识别素…