亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為開發和生產使用相同的 dockerfile

如何為開發和生產使用相同的 dockerfile

Go
慕無忌1623718 2023-06-19 14:07:26
我有 2 個 Dockerfile,1 個用于開發,1 個用于生產:產品:FROM golang AS builderWORKDIR /go/src/gitlab.com/company/projectCOPY . .RUN go build -o ./release/api .FROM scratchEXPOSE 9999COPY --from=builder /go/src/gitlab.com/company/project/release/api .CMD ["./api"]和開發:FROM golangWORKDIR /go/src/gitlab.com/company/PROJECTCOPY . .RUN go build -o ./release/api .CMD ["./release/api"]我想將這兩個合并為一個,因為維護 2 個 Dockerfile 是一種不好的做法主要區別在于,在 dev 中,我使用golang實用的圖像,而在 prod 中,我使用scratch圖像,這大大減少了我的二進制文件的大小。似乎我可以在 Dockerfile 中使用多個階段,并在構建時指定階段名稱:docker build . --target=builder但是如果我這樣做,我不知道如何在第一階段有條件地運行我的應用程序 = [如果我在開發中,則在第一階段運行該應用程序,否則,在第二階段運行該應用程序]我應該怎么做?
查看完整描述

1 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

像這樣的事情怎么樣?我沒有測試它,也沒有深入思考你的例子,但也許是接近你需要/幫助你找到最終解決方案的地方?


FROM golang:alpine AS base

WORKDIR /go/src/gitlab.com/company/project

COPY . .

RUN go build -o ./release/api .


FROM base AS dev

CMD ["./release/api"]


FROM scratch AS prod

EXPOSE 9999

COPY --from=base /go/src/gitlab.com/company/project/release/api .

CMD ["./api"]

根據 targetdocker build --target=prod或中指定的值docker build --target=dev,將構建不同的圖像。


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號