[Docker] 使用 Dockerfile 的多級構建 (multi-stage builds)
阿新 • • 發佈:2018-06-28
產品 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 .最終結果是同樣小的生產環境 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.htmlFROM 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 .
[Docker] 使用 Dockerfile 的多級構建 (multi-stage builds)