云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

Docker镜像越来越大?我用这 3 个技巧直接瘦身 80%!附实战优化对比

jxf315 2025-08-05 19:07:23 教程文章 4 ℃

几个月前,我在公司部署一个基于Spring Boot的Java项目,构建出来的Docker镜像居然达到了 1.5GB+!

CI/CD 构建流程一跑就是十几分钟,推送镜像甚至会因为带宽和服务器空间告警,导致构建失败。

一开始我以为是依赖多、项目大,后来深入分析才发现:

镜像大,不是项目的问题,而是你不会减肥!

于是我从实际项目中总结出3个镜像优化技巧最终将镜像体积缩小了80%以上让CI/CD构建提速了接近一倍。

第一招:用多阶段构建,丢掉构建残渣

很多Java开发者写Dockerfile 都喜欢直接基于openjdk镜像构建:

这样写会把整个源码、构建工具、缓存统统打包进镜像,导致体积巨大。

我改用多阶段构建后立刻见效:

编译环境和运行环境彻底隔离,最终镜像中只保留必要的JRE和构建产物,直接瘦身数百MB!

第二招:换掉沉重的基础镜像

很多同事图省事直接用openjdk官方镜像:

结果一个镜像就400多MB起步。

而我在对比后选用了eclipse-temurin17-jre-alpine版本轻量又稳定。 甚至你也可以试试:

  • eclipse-temurin:17-distroless
  • gcr.io/distroless/java17

这些基础镜像移除了shell、包管理器、甚至glibc,体积大大减小,还提升了安全性。

第三招:用docker-slim精简镜像结构

就算你做好了多阶段构建,也别忘了最后一步收尾工作:清理冗余+自动瘦身

我推荐你用这个神器:docker-slim (怎么安装参考github的slimtoolkit/slim项目)

它会自动分析哪些文件没被运行依赖,然后剔除,生成一个可运行的超小镜像。

我的经验是:

  • 原始镜像 573MB → 瘦身后150MB,没出任何兼容问题。
  • 每次构建前最好清理target/和.m2缓存,进一步缩减体积。

实战案例对比:瘦身效果,一图胜千言!

优化前后对比,一目了然:

原始镜像构建流程:

  • openjdk镜像构建的demo-app573MB
  • 默认基础镜像openjdk:17:471MB

优化后逐步减重:

  • 使用eclipse-temurin:17-jre精简后镜像263MB
  • 最终通过docker-slim精简后的镜像150MB

几个关键节点:

  • 替换基础镜像就能省下几百MB
  • 多阶段构建+docker-slim,进一步瘦身效果更明显
  • 镜像越小,推送速度越快,网络吞吐降低,部署失败率越低!

附加工具推荐:镜像优化利器

  • docker-slim镜像自动瘦身的利器,支持Java/Go/Node项目
  • Dive可视化分析每一层Docker Layer
  • JibGoogle出品,构建Java镜像无需Dockerfile,自动优化层级结构

结语:别再为镜像发胖买单了!

镜像优化不只是省空间,更能加快部署效率、提升CI/CD稳定性,避免构建超时、推送失败的尴尬场景。

轻量构建不是未来,是现在就该做的事。

你有遇到过因为镜像太大而构建失败的经历吗?欢迎在评论区一起聊聊你的优化技巧!

最近发表
标签列表