作家
登录

理解Docker的多阶段镜像构建

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

我们修改一下Dockerfile.build,在编译Go源文件时加上CGO_ENABLED=0:

  1. // github.com/bigwhite/experiments/multi_stage_image_build/heterogeneous/Dockerfile.build 
  2.  
  3. FROM golang:latest 
  4.  
  5. WORKDIR /go/src 
  6. COPY httpserver.go . 
  7.  
  8. RUN CGO_ENABLED=0 go build -o myhttpserver ./httpserver.go 
  1. # docker build -t myrepo/golang-static-builder:latest -f Dockerfile.build . 
  2. Sending build context to Docker daemon  4.096kB 
  3. Step 1/4 : FROM golang:latest 
  4.  ---> 1a34fad76b34 
  5. Step 2/4 : WORKDIR /go/src 
  6.  ---> 593cd9692019 
  7. Removing intermediate container ee005d487ad5 
  8. Step 3/4 : COPY httpserver.go . 
  9.  ---> a095eb69e716 
  10. Step 4/4 : RUN CGO_ENABLED=0 go build -o myhttpserver ./httpserver.go 
  11.  ---> Running in d9f3b3a6c36c 
  12.  ---> c06fe8dccbad 
  13. Removing intermediate container d9f3b3a6c36c 
  14. Successfully built c06fe8dccbad 
  15. Successfully tagged myrepo/golang-static-builder:latest 
  16.  
  17. # docker images 
  18. REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE 
  19. myrepo/golang-static-builder   latest              c06fe8dccbad        31 seconds ago      739MB 

接下来,我们再基于golang-static-builder中已经build完毕的静态连接的myhttpserver来构建我们最终的应用image:

  1. # docker create --name appsource myrepo/golang-static-builder:latest 
  2. # docker cp appsource:/go/src/myhttpserver ./ 
  3. # ldd myhttpserver 
  4.     not a dynamic executable 
  5. # docker rm -f appsource 
  6. # docker rmi myrepo/golang-static-builder:latest 
  7. # docker build -t myrepo/myhttpserver-alpine:latest -f Dockerfile.alpine . 

运行新image:

Note: 我们可以用strace来证实静态连接时Go只应用的是Go本身的runtime实现,而并未应用到libc.a中的代码:

  1. # docker run myrepo/myhttpserver-alpine:latest 
  2. Webserver start 
  3.   -> listen on port:1111 

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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