利用 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值