教程 docker tutorial

层与联合文件系统(UnionFS & Layers)

Docker 镜像和容器使用分层文件系统(Layered Filesystem)和联合文件系统(UnionFS)来管理文件与目录。理解这些机制有助于优化镜像体积、提升构建速度和运行效率。

1. 镜像分层(Image Layers)

  • 每条 Dockerfile 指令都会创建一个镜像层(Layer)
  • 镜像层是只读的,便于复用和缓存
  • 镜像通过叠加层形成最终可运行的文件系统

示例:

dockerfile
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y python3
COPY . /app

`

生成的镜像层:

  1. 基础层:ubuntu:20.04
  2. 安装更新层:apt-get update
  3. 安装 Python 层
  4. 应用代码层:COPY . /app

2. 容器可写层(Container Writable Layer)

  • 容器启动时,在镜像之上增加可写层
  • 所有对文件系统的修改(创建、删除、修改)都发生在这一层
  • 删除容器时,可写层随之销毁,不影响原镜像

3. 联合文件系统(UnionFS)

UnionFS 是 Docker 实现镜像层叠加的核心技术,它将多个只读层和可写层合并呈现为单一文件系统。

常见 UnionFS 类型:

  • AUFS(Advanced Multi-Layered Unification Filesystem)
  • OverlayFS / Overlay2(目前主流)
  • Btrfs / ZFS(部分高级场景)

4. 优势

  • 镜像层复用,提高存储效率
  • 构建缓存加速镜像构建
  • 容器启动速度快,节省磁盘空间
  • 易于版本管理和回滚

掌握 Docker 层与 UnionFS 的原理,将帮助你在构建镜像、优化镜像体积和调试容器时做出更高效的决策。