容器与编排

Docker 镜像瘦身实战:从 1.2GB 压到 120MB 的 5 步

镜像越大,拉取越慢、攻击面越广、存储越贵。本文给出可立即落地的 5 步瘦身法,每一步都附可复用的 Dockerfile 片段与验证命令。

作者:巧匠团队·7 分钟阅读·更新于 2026-08-24

先量再减:看清脂肪在哪

动手前先用 `docker images` 看体积,再用 `dive` 逐层分析每层新增了什么。没有度量就没有方向。

docker images
# 或逐层分析:
dive <image>

步骤一:换小基础镜像

把 `ubuntu`/`debian` 换成 `alpine`、`slim` 或 `distroless`。仅这一项常能砍掉几百 MB。注意 alpine 用 musl libc,个别二进制需重编译。

FROM node:20-alpine   # 而非 node:20(基于 debian)

步骤二:多阶段构建

编译依赖放在构建阶段,最终镜像只 COPY 编译产物。运行阶段不需要 gcc、node_modules 源码等。

FROM golang:1.22 AS build
RUN go build -o app .
FROM gcr.io/distroless/static
COPY --from=build /app /app
ENTRYPOINT ["/app"]

步骤三:.dockerignore 别漏

没有 `.dockerignore` 时,`COPY . /app` 会把 node_modules、.git、本地日志全打进镜像。加一份忽略清单立省空间。

node_modules
.git
*.log
.env

步骤四:合并 RUN 并清理缓存

每条 RUN 是一层。把安装与清理放在同一条 RUN 里,避免「装了又删」却留在上一层。

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl \
 && rm -rf /var/lib/apt/lists/*

步骤五:复核与固化

重建后用 `docker images` 对比前后体积,并把最佳实践固化进项目模板,避免下次又膨胀。