Docker 构建总是很慢?镜像分层缓存的 5 个实用习惯

举报
yd_214683010 发表于 2026/10/23 10:22:19 2026/10/23
【摘要】 刚学 Docker 的时候,我最大的困惑不是写 Dockerfile,而是每次改一行代码,docker build 就要重新跑好几分钟。后来才明白:Docker 的镜像分层缓存是个"按顺序失效"的机制,掌握几条习惯就能让构建快一个数量级。习惯一:把变化最少的部分放最前面每一层都依赖它之前的所有层。基础镜像、系统依赖这些几乎不变的内容,一定要写在 Dockerfile 的最前面;业务代码放最后...

刚学 Docker 的时候,我最大的困惑不是写 Dockerfile,而是每次改一行代码,docker build 就要重新跑好几分钟。后来才明白:Docker 的镜像分层缓存是个"按顺序失效"的机制,掌握几条习惯就能让构建快一个数量级。

习惯一:把变化最少的部分放最前面

每一层都依赖它之前的所有层。基础镜像、系统依赖这些几乎不变的内容,一定要写在 Dockerfile 的最前面;业务代码放最后。这样改代码时只会重建最后一两层。

习惯二:先复制依赖描述文件,再安装

以 Python 为例,不要上来就 COPY . .。先 COPY requirements.txt . 然后 RUN pip install -r requirements.txt,最后再复制源码。依赖没变时,pip install 这一层直接命中缓存,秒过。

习惯三:RUN 指令合并,但别贪多

多个 apt-get 或 pip install 合并成一条 RUN 能减少层数,但一个巨型 RUN 会让缓存粒度变粗。折中做法:按"变化频率"分组,系统依赖一组、语言依赖一组、构建工具一组。

习惯四:用好 .dockerignore

node_modules、__pycache__、.git 这些目录如果不小心被 COPY 进去,不仅镜像变大,还会导致缓存频繁失效。一个 10 行的 .dockerignore 文件,效果立竿见影。

习惯五:多阶段构建收尾

用 builder 阶段装编译依赖、跑构建,最终镜像只 COPY 产物。镜像从 1GB 瘦到 100MB,推送拉取都快,缓存命中率也更高。

最后分享一个验证方法:docker build --progress=plain 可以看到每一层是 CACHED 还是重新构建。改完 Dockerfile 跑一次,看看缓存命中情况,调优就有依据了。

记住一句话:Dockerfile 不是按"逻辑顺序"写,而是按"变化频率从低到高"写。 养成这个思维,构建速度自然就上去了。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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