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

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

用于 golang 的 Docker 多階段構建創建大圖像

用于 golang 的 Docker 多階段構建創建大圖像

Go
料青山看我應如是 2023-04-04 15:26:29
我想為我的 gaoling 項目使用多階段構建,當我在本地為 linux/windows/Mac 構建項目時,我得到了12.6 mb 的大小,我目前有一個小的 gaoling CLI 程序。現在我想用 lightwhigt docker image 構建它并使用選項scratch構建它as我使用以下內容,但是當我檢查圖像時,我看到它的大小366MB,知道我在這里遺漏了什么嗎?它應該小于 20MB……#build stageFROM golang:alpine as builderWORKDIR /go/src/tzfADD . /go/src/tzfRUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzfRUN apk add --no-cache gitFROM golang:alpine RUN mkdir /buildADD . /build/WORKDIR /buildRUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzfFROM scratchCOPY --from=builder /build/main /app/WORKDIR /appCMD [“./ova -v"]
查看完整描述

2 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

您應該首先使用一個golang:alpine容器來構建應用程序,然后使用一個容器alpine來運行編譯后的應用程序。


是這樣的:


# builder

FROM golang:alpine AS builder

WORKDIR /go/src/tzf

ADD . /go/src/tzf

RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf


# runner

FROM alpine

WORKDIR /app

COPY --from=builder /build/main /app/

CMD [“./ova -v"]

應該會產生一個占地面積小的容器。


查看完整回答
反對 回復 2023-04-04
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

當您構建最終圖像時,請注意只復制您希望最終出現在圖像中的確切文件。在這里讓您的二進制文件成為圖像的 ENTRYPOINT 是有意義的,因為實際上您無法用它做任何其他事情。


我可能會像這樣制作一個兩階段管道:


# size of this stage doesn't matter; use the standard image

FROM golang AS builder

WORKDIR /go/src/tzf

ADD . ./

RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o /ova tzf


FROM scratch

# only copy the one file, may as well put it in /

COPY --from=builder /ova /ova

ENTRYPOINT ["/ova"]

# if you want to launch it with default options, you can

# CMD ["-v"]


查看完整回答
反對 回復 2023-04-04
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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