Docker镜像分层的注意点

Docker镜像打包程序的镜像困惑

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

Docker build的分层注意点

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

Dockerfile开头的From和MAINTAINER其实都是一层镜像 如果From和MAINTAINER不同,就算是分层后面的命令语句相同也不会是云南idc服务商相同的镜像。如都是意点执行RUN echo "hello world" >> test.txt,如果MAINTAINER不同,镜像则生成的分层这个语句的镜像层将是不同的。 原理上如果每一层对应的意点父层不同,那怕执行的镜像命令相同,Docker也会生成一层新的分层镜像,如下面两个Dockerfile文件

Dockerfile 1:

FROM centos:latest MAINTAINER duffqiu@gmail.com RUN echo "test" >> hello.txt RUN echo "hello" > test.txt 

Dockerfile 2:

FROM centos:latest MAINTAINER duffqiu@gmail.com RUN echo "hello" > test.txt RUN echo "test" >> hello.txt 

这两个文件的意点内容只是两个RUN语句顺序不一样,但是***它们生成的image层是不一样的,可以通过docker history <image name>来对比

从这里面也看到一个问题,From***不要用lastest标签,香港云服务器避免不同镜像的顶层是不同,从而无法复用。

实践建议

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

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

【本文是专栏作者“VIPDOCKER-了哥 ”的原创文章,如需转载请通过与作者联系】

戳这里,源码库看该作者更多好文

应用开发
上一篇:芯片行业再现裁员!Imagination Technologies宣布裁减130人
下一篇:虚拟现实是数据中心工作人员未来的培训基地吗?