1. 程式人生 > >[Docker] 使用 Dockerfile 的多級構建 (multi-stage builds)

[Docker] 使用 Dockerfile 的多級構建 (multi-stage builds)

產品 controls 生產 ont lin copy org arw OS

Multi-stage build 即在一個 Dockerfile 中使用多個 FROM 指令。 每個 FROM 指令可以使用不同的基礎鏡像,並且每一個都開啟新的構建階段。 你可以有選擇地拷貝一個階段的產品到另一個中,留下不想包含在最終 image 中的東西。
FROM golang:1.7.3
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
 
FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=0 /go/src/github.com/alexellis/href-counter/app . CMD ["./app"]

$ docker build -t alexellis2/href-counter:latest .
最終結果是同樣小的生產環境 image,並顯著減小了復雜性。 不需要創建任何中間 image,並且你不需要提取任何文件到本地系統中。 它是如何工作的?   1. 第二個 FROM 指令使用 alpine:latest 作為基礎 image 開啟一個新的構建階段。   2. COPY --from=0 這一行拷貝前一個階段構建的產品到這個新的階段中。GO SDK 和其它中間產品被留下,並且不會被保存到最終的 image 中。 Guides: https://docs.docker.com/develop/develop-images/multistage-build/ Link: https://www.cnblogs.com/farwish/p/9240609.html

[Docker] 使用 Dockerfile 的多級構建 (multi-stage builds)