Docker镜像从200MB瘦身到20MB,我做了这3件事
时间:2026-05-30 23:45:30 阅读:27
项目上线前发现镜像太大,拉取慢、部署卡,查了下原因做了几个优化,效果立竿见影。
第一件事:换基础镜像
之前用的是ubuntu:latest,拉下来就200多MB。其实大部分应用根本不需要完整的操作系统环境,换成alpine镜像只有5MB。改一行FROM指令就行,镜像直接从200MB掉到50MB以下。唯一要注意的是alpine用的是musl libc而不是glibc,如果项目依赖glibc的库可能需要额外处理。
第二件事:多阶段构建
编译型语言(Go、Java、Rust)的镜像大,很多时候是因为把编译工具也打包进去了。用多阶段构建:第一个阶段用完整镜像编译,第二个阶段只把编译产物复制到一个空镜像里。Go项目用这个方法,最终镜像可以做到10MB以下——一个静态二进制文件加上一个空的scratch基础镜像。
第三件事:合并RUN指令
Dockerfile里每个RUN指令都会产生一层layer。如果你写了5个RUN,中间下载的临时文件虽然在后面的层里删了,但镜像体积还是包含了这些文件。把相关的操作合并成一个RUN指令,中间产生的临时文件在同一层里删除就不会占用额外空间。
效果
三步做完,项目镜像从200MB降到了18MB。拉取速度快了10倍,CI/CD流程也跟着快了不少。Dockerfile就改了几行,没有改任何业务代码。




提供云计算服务