Clarify image build semantics

This commit is contained in:
yeasy
2026-04-24 10:51:49 -07:00
parent 4b44d64cd8
commit 94f74fc86e
3 changed files with 39 additions and 46 deletions
+3 -3
View File
@@ -15,7 +15,7 @@ Docker 镜像并不是一个单纯的文件,而是由一组文件系统叠加
这种分层存储结构使得镜像的复用分发变得非常高效
* **复用**如果多个镜像都基于同一个基础镜像 (例如都基于 `ubuntu:24.04`)那么宿主机只需要下载一份 `ubuntu:24.04`所有镜像都可以共享它
* **轻量**镜像仅仅记录了与基础镜像的差异因此体积非常小
* **轻量分发**镜像可以复用已有层只传输和存储新增差异层不过镜像是否足够小仍然取决于基础镜像和新增内容本身
### 4.7.2 容器层与读写
@@ -57,8 +57,8 @@ Docker 镜像的每一层都有一个唯一的 ID,这个 ID 是根据该层的
### 4.7.4 联合文件系统
Docker 使用联合文件系统 (Union FS) 来实现这种分层挂载常见的驱动包括 `overlay2` (目前推荐)`aufs` (早期使用)`btrfs``zfs`
Docker 使用联合文件系统 (Union FS) 与写时复制思路来实现这种分层挂载传统的实现方式常见于 `overlay2``aufs``btrfs``zfs` 等存储驱动而在 Docker Engine 29.0 及之后的全新安装中默认镜像后端已经变为 containerd image store它使用 snapshotter 来管理这些层
虽然实现细节不同但它们都遵循上述的 **分层 + CoW** 模型
虽然底层实现细节不同但它们都遵循上述的 **分层 + CoW** 模型因此无论你看到的是 `overlay2` 还是 containerd snapshotter理解镜像层容器层和写时复制的方式都是一样重要的
> 想要深入了解 Overlay2 等文件系统的具体实现原理包括 WorkDirUpperDirLowerDir 等底层细节请阅读 **[第十二章 底层实现](../12_implementation/README.md)** 中的 **[联合文件系统](../12_implementation/12.4_ufs.md)** 章节