温馨提示×

ubuntu overlay与docker的关系

小樊
32
2025-12-20 02:06:58
栏目: 智能运维

Ubuntu 中的 OverlayFS 与 Docker 的关系

核心关系概述

  • OverlayFS 是 Linux 内核自 3.18 起提供的联合文件系统,可把多个目录以“层”的方式叠加,向上提供统一的视图;Docker 在 Ubuntu 上常用其作为镜像与容器的存储驱动 overlay/overlay2。其中 overlay2 是对 overlay 的改进,支持多层 lowerdir、对 inode 更友好,已成为主流默认选择。Docker 的镜像分层与容器的可写层,正是通过 OverlayFS 的 lowerdir/upperdir/merged/workdir 机制实现。

工作原理简述

  • 镜像层映射为多个只读 lowerdir,容器运行时创建可写 upperdir;OverlayFS 将各层联合挂载到容器的 merged 目录作为根文件系统,workdir 为内部工作目录。读取时优先命中上层;修改时触发写时复制(copy_up),首次会拷贝整个文件到 upperdir,后续写入作用于副本;删除通过 whiteout 机制屏蔽底层文件。示例挂载:mount -t overlay overlay -o lowerdir=/lower1:/lower2,upperdir=/upper,workdir=/work /merged。

在 Ubuntu 上的典型使用场景

  • Docker 容器存储:在 Ubuntu 主机上,Docker 通常以 overlay2 为存储驱动管理镜像与容器层,数据位于 /var/lib/docker/overlay2,通过 mount 可看到 merged/upper/work 等挂载点。
  • 只读根文件系统与回滚:借助 overlayroot(Ubuntu 提供的工具),可将根分区设为只读,所有改动写入 upper(如 tmpfs 或持久化块设备),重启后易于恢复,常用于信息亭、嵌入式设备。
  • 只读镜像叠加临时可写层:对 SquashFS 等只读基础层,可在关键目录(如 /lib/firmware)上叠加 OverlayFS,使其在该目录具备读写能力,常用于 Live 系统或嵌入式环境。

版本与注意事项

  • 内核与文件系统:OverlayFS 自 Linux 3.18 合入内核;overlay2Linux 4.0+ 上更完善。作为 upper 的文件系统需支持 d_type(如 ext4/xfs),而 NFS 等不满足该条件不适合作为 upper。
  • 层数与性能:overlay2 原生支持最多 128 个 lowerdir;OverlayFS 为文件级 CoW,首次修改大文件会整文件拷贝,层数较深时路径查找与缓存失效可能带来开销。
  • 变更存储驱动的影响:切换 Docker 存储驱动会使现有容器/镜像不可直接访问,切换前应 docker save 或推送到镜像仓库备份。

0