【翻译 Builder pattern vs. Multi-stage builds in Docker 】 实现镜像瘦身的效果

       原文链接   https://blog.alexellis.io/mutli-stage-docker-builds/

       相关参考   https://docs.docker.com/develop/develop-images/multistage-build/

 

关键词 - COPY --from=

 

是么是建造器模式?

对于像Golang这样的静态编译语言,人们倾向从Golang“ SDK”镜像中获取其Dockerfile,添加源代码,进行构建,然后将其推送到Docker Hub。不幸的是,所得图像的大小非常大-至少为670mb。
A workaround which
is informally called the builder pattern involves using two Docker images - one to perform a build and another to ship the results of the first build without the penalty of the build-chain and tooling in the first image.
有个变通之法(非正式版),叫建造器模式,涉及到两个Docker镜像, 一个用于执行构建,另一个用于调用第一个构建的结果,后者完成后不会影响第一个镜像中内容。

 

建造器模式的示例:

     从Golang基本映像派生整个运行时/ SDK(Dockerfile.build)
     添加源代码
     产生一个静态链接的二进制文件
     将静态二进制文件从映像复制到主机(docker create,docker cp)
     源自SCRATCH或其他一些轻量级图像,例如alpine(Dockerfile)
     重新添加二进制文件
     将微小的映像推送到Docker Hub

 

一个例子:

Dockerfile.build

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 .

 Dockerfile


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值