【Docker】(三)联合文件系统UnionFS + Overlay2

📅 发布时间:2026/8/4 15:45:21
【Docker】(三)联合文件系统UnionFS + Overlay2 问答题1、请对UnionFS联合文件系统的实现原理做一个完整说明。答用UnionFS来实现镜像只读但容器是可写在镜像层上面分支创建一个可写层可写层会覆盖镜像层改动时不影响底层数据实现了底层镜像的只读不能被修改。将它们挂载到一个文件系统在挂载点目录mountedfs中创建、删除修改文件时具体保存在可写层upperlayer中。读文件读先可写层没有了再向下读镜像层既实现多容器共享底层镜像节省资源又能让每个容器拥有独立可写空间删除容器只会删除可写层upperlayer底层镜像可重复使用。UnionFS实现了镜像的分层存储 和 容器的数据持久化2、Docker 和 Overlay2、UnionFS 是一个什么样的关系答Overlay2是Docker默认的存储引擎Overlay2是基于内核实现的而UnionFS是基于软件包实现的一、什么是UnionFS联合文件系统UnionFS是一种分层虚拟文件系统核心能力把多个独立目录层合并成一个统一、可视化的挂载视图。多层目录存在同名文件时上层文件会覆盖下层文件底层只读层不会被修改是Docker镜像分层、容器读写的底层基石。二、AUFSUnionFS升级版完整工作原理AUFS是早期Docker使用的联合文件系统也是UnionFS的实现分支分为只读底层镜像层、上层可写容器层两层结构。1. 文件读取逻辑多层目录从上至下优先级递减挂载视图优先展示上层文件可写层upper存在文件 → 直接读取upper文件upper无对应文件逐层向下读取只读镜像层内容。2. 新增文件逻辑在容器内新建文件文件只会写入upper可写层底层只读镜像层完全不会改动实现镜像层共享复用。3. 文件删除whiteout白文件机制容器中删除镜像自带文件时不会真正删除底层只读文件而是在upper层生成特殊隐藏文件.wh.文件名白文件。AUFS识别到.wh.标记后会在统一挂载视图中隐藏对应文件达到“删除”视觉效果底层原始镜像文件完整保留多个容器可以继续共享底层镜像。三、OverlayFS 三层标准结构lower/upper/workLinux 3.18内核原生引入OverlayFS替代AUFS成为主流结构分为三个固定目录lowerdir只读底层层存放镜像所有只读分层多个容器可共用同一组lower目录磁盘复用率高不允许任何写入修改。upperdir容器可写层容器运行时所有新增、修改、删除操作全部存在此目录每个容器独立专属upperdir。workdir临时工作目录OverlayFS内部操作缓存目录文件重命名、删除、拷贝等操作的中转缓存挂载期间目录不可被其他进程占用。最终merged目录是对外统一挂载视图用户/容器看到的整合后完整文件系统。四、Docker 默认存储驱动Overlay2Overlay2是OverlayFS的优化增强版本也是当前Docker默认存储驱动支持最多128层镜像堆叠AUFS层数限制更低内核原生实现无需额外补丁性能、稳定性远超AUFS所有容器分层数据统一存放在宿主机路径/var/lib/docker/overlay2。宿主机目录拆解说明进入/var/lib/docker/overlay2可以看到两类目录一串随机ID命名的分层目录对应镜像每一层文件容器专属目录内部包含lower记录底层只读层、diff等价upper可写层、work、merged挂载视图。启动容器后容器内所有操作都会同步记录到对应diff可写目录。五、CoW写时复制机制 容器数据销毁原理1. CoW 写时复制Copy-on-Write底层镜像文件只读容器修改文件时触发CoW机制当容器需要修改lower只读层自带文件不会直接改动底层文件而是先把文件完整复制到upper可写层再在副本上修改。挂载视图展示upper内修改后的新文件底层原始镜像文件保持原样保障多容器共享镜像互不干扰。2. 容器销毁数据丢失原理镜像所有只读层持久化保存在磁盘但是upper可写层仅属于当前运行容器执行docker rm删除容器时Docker会直接清理该容器专属的upper、work目录容器运行中新增、修改的所有数据全部永久丢失底层镜像只读层不受影响可被其他容器继续使用。