利用 Dockfile 多階段構建縮小鏡像體積

# 指定編譯鏡像
FROM golang:latest AS development
# 下載源碼
RUN git clone --progress --verbose --depth=1 https://github.com/Bpazy/rss-middleware /rss-middleware
WORKDIR /rss-middleware
# 編譯
RUN go env && CGO_ENABLED=0 go build ./cmd/rss-middleware

# 指定二階段鏡像,用 alpine 的原因是它非常精巧
FROM alpine:latest AS production
ENV CRON ""
ENV QBITTORRENT ""
ENV QBITTORRENT_PASSWORD ""
ENV QBITTORRENT_USERNAME ""
ENV RSS ""
# 將一階段編譯結果複製到二階段鏡像中
COPY --from=development /rss-middleware/rss-middleware /rss-middleware/rss-middleware
WORKDIR /rss-middleware
ENTRYPOINT ./rss-middleware \
                -rss $RSS \
                -qbittorrent $QBITTORRENT \
                -qbittorrent-username $QBITTORRENT_USERNAME \
                -qbittorrent-password $QBITTORRENT_PASSWORD \
                -cron="$CRON"

對比

先將上面 Dockerfile 中的二階段邏輯註釋掉,然後編譯 docker build --no-cache . -t single
恢復多階段 Dockerfile,再次編譯 docker build --no-cache . -t multi

看結果可見差距懸殊:

PS C:\Users\hanzi> docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
multi                  latest              fee1a588ee7c        5 minutes ago       17.7MB
single                 latest              b5657a91634f        5 minutes ago       916MB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章