作家
登录

理解Docker的多阶段镜像构建

作者: 来源: 2017-11-14 09:05:22 阅读 我要评论

  • WORKDIR /go/src 
  • COPY httpserver.go . 
  •  
  • RUN go build -o myhttpserver ./httpserver.go 
  • 在同目次下构建golang-builder image:

    1. # docker build -t myrepo/golang-builder:latest -f Dockerfile.build . 
    2. Sending build context to Docker daemon  5.895MB 
    3. Step 1/4 : FROM golang:latest 
    4.  ---> 1a34fad76b34 
    5. Step 2/4 : WORKDIR /go/src 
    6.  ---> 2361824677d3 
    7. Removing intermediate container 01d8f4e9f0c4 
    8. Step 3/4 : COPY httpserver.go . 
    9.  ---> 1ff14bb0bc56 
    10. Step 4/4 : RUN go build -o myhttpserver ./httpserver.go 
    11.  ---> Running in 37a1b76b7b9e 
    12.  ---> 2ac5347bb923 
    13. Removing intermediate container 37a1b76b7b9e 
    14. Successfully built 2ac5347bb923 
    15. Successfully tagged myrepo/golang-builder:latest 
    16.  
    17. REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE 
    18. myrepo/golang-builder   latest              2ac5347bb923        3 minutes ago       739MB 
    1. # docker create --name appsource myrepo/golang-builder:latest 
    2. # docker cp appsource:/go/src/myhttpserver ./ 
    3. # docker rm -f appsource 
    4. # docker rmi myrepo/golang-builder:latest 
    5. # 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:

    1. // github.com/bigwhite/experiments/multi_stage_image_build/isomorphism/Dockerfile.alpine 
    2.  
    3. From alpine:latest 
    4.  
    5. COPY ./myhttpserver /root/myhttpserver 
    6. RUN chmod +x /root/myhttpserver 
    7.  
    8. WORKDIR /root 
    9. ENTRYPOINT ["/root/myhttpserver"

    构建alpine版应用image:


    1.   推荐阅读

        Mobile Pwn2Own世界黑客大赛攻破iOS11,iPhone X被远程越狱

      Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 信赖会有越来越多的年青人参加到收集安然行业中来,以“没有收集安然就没有国度安然”为指导,>>>详细阅读


      本文标题:理解Docker的多阶段镜像构建

      地址:http://www.17bianji.com/lsqh/38807.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)