知识卡片

镜像分层的写时复制与用时分配

专业/工作 · 557.a

内容

Docker镜像由多个只读层叠加而成,每一层对应构建脚本里的一条指令,容器启动时会在最上面加一个可写层,所有运行期的修改只写在这一层,底层的只读镜像永远不变。基于此,多个容器可以共享同一份底层只读镜像文件而不需要各自复制一份——所有容器数据都从同一份镜像读取,只有当某个容器要修改文件时,才会触发写时复制,把要改的文件复制到自己的可写层再改;同样,启动容器时也不会预先分配磁盘空间,只有真正写入新文件才按需分配(用时分配)。发散:镜像分层机制本质上是把”多个容器共享同一份基础环境”这件事,转化成了”只读层零成本共享、可写层按需付费”的存储模型,这和[[精简配置与快照克隆的空间分配策略]]中快照/克隆的写时复制思路完全同源,只是这里共享的对象从数据块换成了整个文件系统层。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第9章《容器存储》