Docker镜像多阶段构建


前言

  在我们日常构建镜像中,镜像构建会依赖上一次镜像构建生产的内容。比如在构建一个JAVA语言镜像,需要先在一个Dockerfile中编译生成JAR包,然后再另外一个Dockerfile把编译好的JAR放到镜像中。这样就相当于增大了CI/CD的复杂度。
  Docker多阶段构建是17.05以后引入的新特性,旨在解决编译和构建复杂的问题。减小镜像大小。因此要使用多阶段构建特性必须使用高于或等于17.05的Docker。


一、多阶段构建出现之前

  构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,为了编写高效的Dockerfile,传统上需要使用shell技巧和其他逻辑来保持层尽可能小,并确保每个层都具有前一层所需的工件而不是其他任何东西。
  在实际工作中,往往有一个Dockerfile用于开发(包含构建应用程序所需的所有内容),还有一个Dockerfile用于生产环境的精简版,它只包含应用程序以及运行它所需的内容。这被称为“建造者模式”。但维护两个Dockerfiles并不是理想的状态。

这是一个Dockerfile.build和Dockerfile的例子,它遵循上面的模式:

Dockerfile.build:
	FROM golang:1.7.3
	WORKDIR /go/src/github.com/alexellis/href-counter/
	COPY app.go .
	RUN go get -d -v golang.org/x/net/html \
	&& CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

Docke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值