UDN-企业互联网技术人气社区

板块导航

浏览  : 902
回复  : 0

[资源分享] Docker镜像分层的注意点

[复制链接]
胭脂粉的头像 楼主
发表于 2016-10-12 09:52:35 | 显示全部楼层 |阅读模式
  Docker镜像打包程序的困惑

  通常我们在对程序进行Docker镜像打包的时候总会有些困惑,到底是将最终的镜像分层打包最后汇总成程序的镜像(也就是一层一层的From)合适,还是说直接将程序从Sourcecode就打包出最终的镜像更合适呢?其实这里面没有说那个是对或错的,要看程序包自身的情况做选择。

  Dockerbuild的注意点

  如果接触过Docker,Dockerbuild大家都清楚怎么用了,但是有几个容易忽略的注意点:

  Dockerfile开头的From和MAINTAINER其实都是一层镜像

  如果From和MAINTAINER不同,就算是后面的命令语句相同也不会是相同的镜像。如都是执行RUNecho"helloworld">>test.txt,如果MAINTAINER不同,则生成的这个语句的镜像层将是不同的。

  原理上如果每一层对应的父层不同,那怕执行的命令相同,Docker也会生成一层新的镜像,如下面两个Dockerfile文件

  Dockerfile1:

  FROM centos:latest
MAINTAINER duffqiu@gmail.com

RUN echo "test" >> hello.txt
RUN echo "hello" > test.txt

  Dockerfile2:

  FROM centos:latest
MAINTAINER duffqiu@gmail.com

RUN echo "hello" > test.txt
RUN echo "test" >> hello.txt

  这两个文件的内容只是两个RUN语句顺序不一样,但是最后它们生成的image层是不一样的,可以通过Dockerhistory<imagename>来对比

  从这里面也看到一个问题,From最好不要用lastest标签,避免不同镜像的顶层是不同,从而无法复用。

  实践建议

  需要看具体情况,如果有一个包是公用的,且比较大,则最好先将这个包打成Image再给后续的程序打包使用,这样使用时占用的机器磁盘空间最小,启动时如果需要pull的话也最快。

  但是如果包本身就是很小,过细的分层也不利于维护和管理,所以最终还是一个艺术问题

文章来源:了哥(Duff)的博客

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部