在同目次下构建golang-builder image:
- # docker build -t myrepo/golang-builder:latest -f Dockerfile.build .
- Sending build context to Docker daemon 5.895MB
- Step 1/4 : FROM golang:latest
- ---> 1a34fad76b34
- Step 2/4 : WORKDIR /go/src
- ---> 2361824677d3
- Removing intermediate container 01d8f4e9f0c4
- Step 3/4 : COPY httpserver.go .
- ---> 1ff14bb0bc56
- Step 4/4 : RUN go build -o myhttpserver ./httpserver.go
- ---> Running in 37a1b76b7b9e
- ---> 2ac5347bb923
- Removing intermediate container 37a1b76b7b9e
- Successfully built 2ac5347bb923
- Successfully tagged myrepo/golang-builder:latest
- REPOSITORY TAG IMAGE ID CREATED SIZE
- myrepo/golang-builder latest 2ac5347bb923 3 minutes ago 739MB
- # docker create --name appsource myrepo/golang-builder:latest
- # docker cp appsource:/go/src/myhttpserver ./
- # docker rm -f appsource
- # docker rmi myrepo/golang-builder:latest
- # docker build -t myrepo/myhttpserver:latest .
这段敕令的逻辑就是大年夜基于golang-builder image启动的容器appsource中将已经构建完毕的myhttpserver拷贝到主机当前目次中,然后删除临时的container appsource以及膳绫擎构建的那个golang-builder image;最后的步调和第一个例子一样,基于本地目次中的已经构建完的myhttpserver构建出最终的image。为了便利,你也可以将这一系列敕令放到一个Makefile中去。
3、应用size更小的alpine image
builder image并不克不及赞助我们为最终的应用image“减重”,myhttpserver image的Size依旧逗留在200MB。要想“减重”,我们须要更小的base image,我们选择了 alpine 。 Alpine image 的size不到4M,再加上应用的size,最终应用Image的Size估计可以缩减到20M以下。
结合builder image,我们只需将Dockerfile的base image改为alpine:latest:
- // github.com/bigwhite/experiments/multi_stage_image_build/isomorphism/Dockerfile.alpine
- From alpine:latest
- COPY ./myhttpserver /root/myhttpserver
- RUN chmod +x /root/myhttpserver
- WORKDIR /root
- ENTRYPOINT ["/root/myhttpserver"]
构建alpine版应用image:
推荐阅读
Mobile Pwn2Own世界黑客大赛攻破iOS11,iPhone X被远程越狱
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 信赖会有越来越多的年青人参加到收集安然行业中来,以“没有收集安然就没有国度安然”为指导,>>>详细阅读
本文标题:理解Docker的多阶段镜像构建
地址:http://www.17bianji.com/lsqh/38807.html
1/2 1