多阶段构建让最终镜像只含运行所需,构建工具和源码都不进生产镜像,体积与攻击面双降。

示例配置

# 构建阶段
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app .

# 运行阶段:只拿二进制
FROM gcr.io/distroless/base
COPY --from=build /src/app /app
CMD ["/app"]

要点速览

  • 多阶段用 AS 命名,运行阶段用 COPY --from 只取产物。
  • 最终用 distroless/alpine 等极小基础,镜像从几百 M 到几十 M。
  • 构建依赖不进生产镜像,CVE 暴露面也跟着小了。
多阶段构建是镜像减肥的第一刀:构建的归构建,运行的归运行。