Docker镜像分层的注意点
<p>通常我们在对程序进行Docker镜像打包的时候总会有些困惑,到底是将最终的镜像分层打包最后汇总成程序的镜像(也就是一层一层的 From )合适,还是说直接将程序从Source code就打包出最终的镜像更合适呢?其实这里面没有说那个是对或错的,要看程序包自身的情况做选择。</p> <h3><strong>Docker build的注意点</strong></h3> <p>如果接触过Docker,Docker build大家都清楚怎么用了,但是有几个容易忽略的注意点:</p> <ul> <li> <p>Dockerfile开头的 From 和 MAINTAINER 其实都是一层镜像</p> </li> <li> <p>如果 From 和 MAINTAINER 不同,就算是后面的命令语句相同也不会是相同的镜像。如都是执行 RUN echo "hello world" >> test.txt ,如果 MAINTAINER 不同,则生成的这个语句的镜像层将是不同的。</p> </li> <li> <p>原理上如果每一层对应的父层不同,那怕执行的命令相同,Docker也会生成一层新的镜像,如下面两个Dockerfile文件</p> </li> </ul> <p>Dockerfile 1:</p> <pre> <code class="language-coffeescript">FROM centos:latest MAINTAINER duffqiu@gmail.com RUN echo "test" >> hello.txt RUN echo "hello" > test.txt </code></pre> <p>Dockerfile 2:</p> <pre> <code class="language-coffeescript">FROM centos:latest MAINTAINER duffqiu@gmail.com RUN echo "hello" > test.txt RUN echo "test" >> hello.txt </code></pre> <p>这两个文件的内容只是两个 RUN 语句顺序不一样,但是最后它们生成的image层是不一样的,可以通过 docker history <image name> 来对比</p> <ul> <li> <p>从这里面也看到一个问题,From最好不要用lastest标签,避免不同镜像的顶层是不同,从而无法复用。</p> </li> </ul> <h3><strong>实践建议</strong></h3> <p>需要看具体情况,如果有一个包是公用的,且比较大,则最好先将这个包打成Image再给后续的程序打包使用,这样使用时占用的机器磁盘空间最小,启动时如果需要pull的话也最快。</p> <p>但是如果包本身就是很小,过细的分层也不利于维护和管理,所以最终还是一个艺术问题</p> <p> </p> <p>来自:http://vipdocker.com/2016/10/11/docker-image-layout/</p> <p> </p>
本文由用户 longxzq 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!