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

 
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 中。
 
 
相關文章
相關標籤/搜索