首页/开发/CI/CD 与发布速查/Docker 多阶段构建
构建与制品管理58 条

Docker 多阶段构建

在同一个 Dockerfile 中区分构建阶段与运行阶段:编译依赖留在构建层,运行镜像只带产物,体积与攻击面同步缩小。

CI/CD 与发布速查开发更新于 2026-10-12
语法FROM ... AS build;后续 FROM 基于运行基础镜像 COPY --from=build
收益运行镜像不含编译器与源码(除需要外)
扩展多阶段还可用于测试阶段与产物提取

Go 示例

Go 示例
FROM golang:1.22 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app ./cmd/app

FROM gcr.io/distroless/static-debian12
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]
COPY go.mod/go.sum 先行、源码后置:依赖层稳定命中缓存,改代码不必重下依赖。

易错点

  • 运行阶段误 COPY 整个工作目录:把源码与缓存带进镜像,选择精确路径
  • 构建阶段与运行阶段基础镜像 libc 不一致:二进制在运行阶段直接报错(如 glibc/musl 混用)

数据来源与参考

  • Docker Docs《Multi-stage builds》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌