Docker多階段構建是一種在Dockerfile中定義多個構建階段的技術,通過這種方法可以減少鏡像的大小,提高構建效率。在多階段構建中,每個階段都有自己的基礎鏡像和指令,可以在不同的階段進行不同的操作。
通過使用多階段構建,可以將構建過程分成多個階段,每個階段的輸出都可以作為下一個階段的輸入。這樣可以避免將構建工具和依賴包帶入最終鏡像中,從而減小鏡像的體積。
下面是一個使用多階段構建的示例Dockerfile:
# 第一個階段,用于構建應用
FROM golang:1.15 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 第二個階段,用于構建最終鏡像
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
在上面的示例中,第一個階段使用golang基礎鏡像構建了應用程序,并將編譯后的二進制文件復制到第二個階段的alpine基礎鏡像中。最終鏡像中只包含最終應用程序和必要的運行時依賴,而不包含構建工具和編譯依賴。