在 Linux 和 Docker 的技术体系中,Overlay 通常出现在两个相关但不同的层面:Linux 的 OverlayFS(overlay 文件系统) 和 Docker 的 overlay/overlay2 存储驱动。它们的关系可以简单概括为:
Docker 利用 Linux 内核的 OverlayFS 实现容器镜像与容器的分层存储。
下面分层说明。
OverlayFS 是 Linux 内核提供的一种 联合挂载(union mount)文件系统。
merged/ <- 用户看到的统一目录
upper/ <- 可写层
lower/ <- 只读层(可以多层)
work/ <- 内部工作目录
示例:
mount -t overlay overlay \
-o lowerdir=/lower,upperdir=/upper,workdir=/work \
/merged
Docker 需要解决两个问题:
因此 Docker 使用了 存储驱动(storage driver),其中最常见的是:
overlay(早期)overlay2(现在默认,性能更好)lowerdirupperdir容器视图
├── upperdir(容器可写层)
├── lowerdir(镜像各层,只读)
└── merged(容器看到的文件系统)
| 层级 | 角色 |
|---|---|
| Linux 内核 | 提供 OverlayFS 文件系统能力 |
| Docker | 使用 OverlayFS 作为存储驱动 |
| 镜像层 | 对应 overlay 的 lowerdir |
| 容器层 | 对应 overlay 的 upperdir |
一句话:
Docker 的 overlay2 存储驱动,本质上是对 Linux OverlayFS 的封装和使用。
查看 Docker 使用的存储驱动:
docker info | grep Storage
查看 overlay 挂载:
mount | grep overlay
Docker 数据目录(默认):
/var/lib/docker/overlay2
如果你愿意,我也可以:
你想深入哪一块?