温馨提示×

linux overlay与docker关系

小樊
37
2026-09-15 16:48:24
栏目: 智能运维

在 Linux 和 Docker 的技术体系中,Overlay 通常出现在两个相关但不同的层面:Linux 的 OverlayFS(overlay 文件系统)Docker 的 overlay/overlay2 存储驱动。它们的关系可以简单概括为:

Docker 利用 Linux 内核的 OverlayFS 实现容器镜像与容器的分层存储。

下面分层说明。


一、Linux 中的 Overlay(OverlayFS)

OverlayFS 是 Linux 内核提供的一种 联合挂载(union mount)文件系统

核心特点

  • 将多个目录“叠加”成一个统一视图
  • 上层(upper)可写,下层(lower)只读
  • 修改文件时采用 写时复制(Copy-on-Write, CoW)

基本结构

merged/   <- 用户看到的统一目录
upper/    <- 可写层
lower/    <- 只读层(可以多层)
work/     <- 内部工作目录

示例:

mount -t overlay overlay \
  -o lowerdir=/lower,upperdir=/upper,workdir=/work \
  /merged

二、Docker 中的 overlay / overlay2

Docker 需要解决两个问题:

  1. 镜像分层(节省空间)
  2. 容器可写但不污染镜像

因此 Docker 使用了 存储驱动(storage driver),其中最常见的是:

  • overlay(早期)
  • overlay2(现在默认,性能更好)

Docker 镜像与容器的关系

  • 镜像:多层只读 lowerdir
  • 容器:在镜像之上加一个可写 upperdir
容器视图
├── upperdir(容器可写层)
├── lowerdir(镜像各层,只读)
└── merged(容器看到的文件系统)

三、Overlay 与 Docker 的关系总结

层级 角色
Linux 内核 提供 OverlayFS 文件系统能力
Docker 使用 OverlayFS 作为存储驱动
镜像层 对应 overlay 的 lowerdir
容器层 对应 overlay 的 upperdir

一句话:

Docker 的 overlay2 存储驱动,本质上是对 Linux OverlayFS 的封装和使用。


四、为什么 Docker 选择 OverlayFS?

  • ✅ 原生内核支持(无需额外模块)
  • ✅ 镜像层可共享,节省磁盘
  • ✅ 启动容器快(无需复制整个文件系统)
  • ✅ 适合不可变基础设施理念

五、常见相关命令

查看 Docker 使用的存储驱动:

docker info | grep Storage

查看 overlay 挂载:

mount | grep overlay

Docker 数据目录(默认):

/var/lib/docker/overlay2

如果你愿意,我也可以:

  • 图示解释镜像/容器叠加过程
  • 对比 overlay vs overlay2
  • Docker 删除容器后空间为何不释放
  • 结合 k8s / containerd 讲 overlay 使用

你想深入哪一块?

0