Docker 文件系统与 Copy-on-Write (CoW) 的强大
发布: (2025年12月8日 GMT+8 11:03)
3 min read
原文: Dev.to
Source: Dev.to

容器的文件系统结构
运行中的容器文件系统由两部分组成,使用联合文件系统(如 Overlay2)层叠在一起。
只读镜像层(基础层)
- 包含操作系统基础、应用程序二进制文件和依赖项。
- 多个基于同一镜像的容器共享这些不可变层。
可读写容器层(顶部层)
- 一个薄的、唯一的最终层,专属于运行中的容器。
- 容器运行期间创建、删除或修改的所有数据仅写入此层,使其 短暂(ephemeral)。
写时复制(CoW)原理
当容器尝试修改只读层中的文件时,Docker 永不直接更改共享的基础层,而是遵循 CoW 过程:
| 操作 | CoW 原理的效果 |
|---|---|
| 读取文件 | 容器直接从共享的只读层读取文件(速度快)。 |
| 修改或删除文件 | Docker 复制 文件从其原始只读层到顶部的可读写层,然后对副本进行修改。原始文件保持不变,供其他容器使用。 |
为什么 CoW 至关重要
- 磁盘效率 – 基础层被共享,避免了操作系统文件和库的重复存储。
- 速度与不可变性 – 读取瞬时完成;原始镜像保持不可变,保证每个容器都有干净的启动环境。
- 快速启动 – 启动时只创建薄的可写层,而不是完整复制镜像文件系统。
理解短暂数据
写入顶部可写层的更改是 短暂 的——它们仅在容器存活期间存在。删除容器会销毁该层:
docker rm
可写层及其所有数据将永远消失。
由于容器被设计为无状态且可随时销毁,任何需要在重启或删除后仍然保留的数据(例如数据库内容、日志)都应存放在 Docker 卷中。
接下来会讲什么?
我们已经覆盖了理论基础:为什么(第 1 篇),是什么(镜像与容器),以及如何(架构与运行时),现在是效率层面(文件系统与 CoW)。敬请期待下一篇专门讨论 Docker 卷数据持久化的文章。