使用范围

优点

多阶段构建(multi-stage build)是 Docker 构建镜像的一种技术,可以显著减少最终镜像的体积。其主要原因有以下几点:

  1. 避免不必要的文件和依赖: 多阶段构建允许在不同阶段使用不同的基础镜像。构建阶段可以使用包含所有构建工具和依赖的大镜像,而最终阶段只需要包含运行所需的最小环境。这样,构建过程中产生的临时文件和不必要的依赖不会被包含在最终镜像中。
  2. 减少中间层: 传统的 Dockerfile 构建过程中,每个步骤都会生成一个新的镜像层,多阶段构建可以减少中间层的数量,因为只有最终阶段的步骤会保留在最终镜像中。
  3. 优化镜像层: 多阶段构建可以将应用程序的构建和运行环境分开,确保最终镜像只包含运行所需的文件和依赖,去除了编译工具和开发依赖,从而减小镜像体积。

示例

一个简单的多阶段构建示例如下:

# 第一阶段:构建应用程序
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 第二阶段:创建最终的运行镜像
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

在这个例子中,第一阶段使用了 golang:1.16 镜像进行构建,包含了 Go 编译器和所有构建依赖。而第二阶段使用了体积更小的 alpine:latest 镜像,只复制了最终的可执行文件 myapp。这样,最终的镜像中不会包含任何构建工具或多余的依赖,显著减少了镜像体积。