Docker 镜像为什么能秒启:分层存储与写时复制

举报
yd_241388977 发表于 2026/10/29 14:33:27 2026/10/29
【摘要】 第一次用 Docker 的人多半会惊讶:一个带着完整运行环境的镜像,启动只要一两秒,跟开虚拟机完全不是一个量级。秘密不在 CPU,而在它存文件的方式:分层。【镜像是一层一层叠出来的】构建镜像时,每条指令生成一层。比如先铺一层操作系统基础文件,再铺运行库,再铺你的应用代码。每层只记录跟上一层相比变了什么,没变的文件不重复存。这带来两个直接好处:一是下载和分发时,本地已有的层不用再下;二是很多镜...

第一次用 Docker 的人多半会惊讶:一个带着完整运行环境的镜像,启动只要一两秒,跟开虚拟机完全不是一个量级。秘密不在 CPU,而在它存文件的方式:分层。


【镜像是一层一层叠出来的】

构建镜像时,每条指令生成一层。比如先铺一层操作系统基础文件,再铺运行库,再铺你的应用代码。每层只记录跟上一层相比变了什么,没变的文件不重复存。这带来两个直接好处:一是下载和分发时,本地已有的层不用再下;二是很多镜像共用同一个基础层,磁盘上只占一份。


【容器启动时只加薄薄一层】

容器跑起来,并不是把镜像复制一份,而是在镜像的只读层之上,再叠一个可写层,进程看到的是合并后的统一视图。加一层空目录当然是瞬间的事,这就是秒启的由来。


【写文件时才真的花成本:写时复制】

进程读文件,直接读下面只读层的数据,零成本。一旦要改某个文件,系统先把整个文件复制到可写层,再在副本上修改,这叫写时复制(Copy-on-Write)。原文件不动,所以删掉容器后镜像干干净净;代价是第一次写大文件会有一次完整复制,频繁改大文件的场景下这层开销不能忽略。


【这解释了几个日常现象】

为什么容器删了数据就没了:数据写在可写层,它随容器一起销毁,想留数据必须挂卷。为什么镜像能做到几十 MB:层层去重加上精简基础镜像。为什么改一行代码重建镜像很快:只有变化的那层和它之后的层重建,前面的层全部走缓存。


理解了分层和写时复制,Docker 的快和省就都不是魔法了,只是把「不变的东西只存一份、变化的东西用到时再复制」贯彻到底。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。