主题
Docker 镜像分层与联合文件系统
一句话机制
Docker 镜像由一层层只读文件系统叠加而成(UnionFS 联合文件系统),创建容器时在镜像顶部加一个可写容器层:所有运行时的改动都落在容器层,镜像层永远只读,因而能被多个容器共享复用。
分层结构
可写容器层(Container layer) ← 唯一可写,容器运行时改动都在这
──────────────────────────
镜像层 N(只读)
...
镜像层 1(只读)
──────────────────────────
bootfs(bootloader + kernel,内核加载后即卸载)- UnionFS:支持把文件系统的修改「作为一次提交」层层叠加,也可把不同目录挂载到同一虚拟文件系统下——这是分层的基础。
- bootfs:最底层,含 bootloader 与 kernel;Linux 启动时先加载 bootfs,内核就绪后卸载。
- 镜像层:只读,构建时每条指令通常对应一层。
- 容器层:创建容器时动态加载到顶部,可写。
不变量
- 镜像只读,容器层才可写。所有对容器的改动只发生在容器层,镜像层不受影响。
- 镜像层可被多个容器共享。正因为镜像只读,一个镜像可以同时支撑多个容器而不冲突,节省磁盘与传输。
- 分层 = 复用。基于已有镜像构建新镜像,只新增「变化层」,是 Docker 镜像轻量的核心原因。
常见误解
- ❌ 「容器里改了文件,镜像就变了」——错。改动只进容器层,镜像层只读;容器删掉,改动随之消失(要持久化用数据卷)。
- ❌ 「每个容器都要拷贝一份完整镜像」——错。镜像层共享,容器只多出一个可写层。
- ❌ 「容器内部自带完整操作系统」——错。镜像底部虽含内核相关 bootfs,但容器没有独立内核,直接复用宿主机内核。
关联
- 上游:3.镜像原理 · 1.Docker介绍
- 同域:Docker技术栈总览 · 容器隔离原理-Namespace与Cgroups
- 域地图:运维与云原生