结论:Docker 镜像由一组只读层(layer)堆叠而成,容器启动时在镜像之上再加一个可写层,通过联合文件系统(UnionFS,如 overlay2)呈现为单一文件系统视图。

展开:Dockerfile 中每条指令(FROM、COPY、RUN 等)通常产生一个新层。分层带来两个核心收益:一是复用,多个镜像共享相同的基础层,节省磁盘和拉取带宽;二是缓存,构建时若某层指令及其上下文没变,直接命中缓存,大幅加速构建。写时复制(Copy-on-Write)是关键机制:容器修改某个只读层中的文件时,该文件先被复制到可写层再修改,原始层不变。易错点有三:1)RUN 中用 && 合并多条命令,避免每条都产生中间层和残留文件(如 apt 缓存要在同一条 RUN 里清理);2)删除文件只是在上层打 whiteout 标记,下层文件仍在镜像里,密钥一旦写进镜像就永久泄露;3)把变动最频繁的指令(如 COPY 源码)放最后,最大化缓存命中。