2017-09-20 69 views
-1

我有一個C/C++項目,並希望從Alpine構建2個圖像進行開發並單獨運行。如何構建dev並運行docker鏡像?

  • 開發圖像:使用dev軟件包(例如:boost-dev)安裝所有像gcc,cmake,庫一樣的開發環境。

  • 運行圖像:包含從開發圖像成功構建後只有二進制文件,並且只有運行的正常庫包(例如:boost)。

因此,運行圖像與開發圖像相比尺寸最小。

我可以使用1個Dockerfile來構建兩個圖像嗎?我使用ONBUILD指令做了一些研究,但沒有找到解決方案。

請幫我解決這個問題。

感謝&問候,

+0

請張貼代碼讓其他人可以幫助你。 [https://stackoverflow.com/help/how-to-ask](https://stackoverflow.com/help/how-to-ask) – jfeferman

回答

0

它曾經是,這將需要兩個多克的圖像,但碼頭工人的支持multi-stage builds最新版本。這將使您能夠通過一個Dockerfile實現您的目標。

您可以閱讀鏈接的文檔以瞭解詳細信息,但想法是您的Dockerfile分爲多個階段,每個階段都以新的FROM行開始。只有最後一個階段用於生成最終的輸出圖像,並且它可以通過索引從其他階段訪問文件系統。從文檔的例子:

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"] 

這裏,第一階段建立一個圍棋應用,而第二級建立與所述編譯的可執行文件的圖像,它使用--from=0參數從第一級拷貝到COPY指令。

相關問題