讲师中心 微信公众号
AI工具推荐 视频效率加速

Docker 架构中 Overlay2 存储驱动在底层是怎么工作的

陌萱大大_1065

陌萱大大_1065

发布时间:2026-07-28 13:14:26

|

192人浏览过

|

来源于php中文网

原创

Overlay2 是 Docker 默认且推荐的存储驱动,基于内核 OverlayFS 实现分层与联合挂载,通过 lowerdir(只读镜像层)、upperdir(容器可写层)、merged(统一视图)和 workdir(原子操作临时区)协同工作,采用 Copy-on-Write 和 Whiteout 机制保障高效、安全的文件操作。

docker 架构中 overlay2 存储驱动在底层是怎么工作的

Overlay2 是 Docker 默认且推荐的存储驱动,它基于 Linux 内核的 OverlayFS 联合文件系统实现,核心思想是用“分层+联合挂载”来高效管理镜像和容器的文件系统。它不复制数据,而是通过目录叠加和按需读写,让多个容器共享镜像层、各自维护独立变更。

四个关键目录各司其职

每个容器运行时,Overlay2 会在 /var/lib/docker/overlay2/ 下为其分配一组目录,主要包括:

  • lowerdir:只读层,对应镜像的多个只读层(可能有多个路径,用冒号分隔)。它们是构建镜像时每条 RUN、COPY 等指令生成的静态快照,所有容器可共享,不可修改。
  • upperdir:可写层,仅属于当前容器。容器内所有新增、修改、删除操作都发生在这里。例如你执行 echo "hi" > /app/log.txt,文件实际写入 upperdir/app/log.txt,不影响底层镜像。
  • merged:用户看到的“真实根文件系统”。它是 lowerdir 和 upperdir 动态合并后的统一视图,挂载到容器的 /。你 ls /bin 看到的是 lowerdir 的内容;ls /app 看到的可能是 upperdir 新增的内容。
  • workdir:OverlayFS 内部必需的临时工作区,用于保障文件操作(如重命名、unlink)的原子性。它对用户完全透明,不能直接访问或修改,挂载后内容会被清空。

读、写、删操作背后的机制

Overlay2 不直接修改只读层,所有变更都通过 Copy-on-Write(写时复制)和 Whiteout(白条)机制处理:

Docker Container Cleaner
Docker Container Cleaner

CLI工具,用于清理已停止的Docker容器、未使用的镜像、卷和网络,释放磁盘空间。

下载
  • 读文件:先查 upperdir;命中则返回;未命中则从最上层的 lowerdir 开始向下查找,直到找到为止。
  • 写文件(已存在):若文件在 lowerdir 中,Overlay2 先将该文件完整拷贝到 upperdir(即 Copy-on-Write),再修改副本。原镜像层始终不变。
  • 删文件:不在 upperdir 创建空文件,而是生成一个特殊隐藏文件(如 .wh.filename),称为 Whiteout,用于“屏蔽” lowerdir 中同名文件,使其在 merged 视图中不可见。

镜像层与容器层如何组织

拉取一个镜像(如 nginx)时,Docker 把它拆成若干只读层,每个层对应一个 /var/lib/docker/overlay2/<layer-id> 目录,含 diff/(实际文件)、link(短名软链,规避 mount 参数长度限制)、lower(记录它依赖的下层 ID)等。容器启动时,Docker 将这些只读层作为 lowerdir,再新建一个空 upperdir,加上 workdir,一起挂载为 merged。

你可以用 docker inspect <container-id> 查看具体路径,也能用 mount | grep overlay 看到类似这样的挂载项:
overlay on /var/lib/docker/overlay2/<id>/merged type overlay (rw,relatime,lowerdir=...,upperdir=...,workdir=...)

为什么推荐 overlay2 而不是 overlay

原始 overlay 驱动存在稳定性缺陷,比如长期运行后触发 “too many links” 错误,或 inode 泄漏。overlay2 在内核 4.0+ 中重构,支持最多 128 层叠加、优化了 inode 复用、修复了并发问题,并原生兼容 d_type=1 的 XFS 或启用 dir_index 的 ext4。只要满足内核版本(≥4.0 或 RHEL/CentOS ≥3.10.0-514)和文件系统要求,就应坚持使用 overlay2。

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

645

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4439

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5337

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1973

2024.04.08

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

219

2026.02.11

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

391

2026.03.31

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

360

2026.05.11

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

265

2026.05.15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn