即使进行清理,Dockerfile RUN也会创build一个胖图层

一般的理解是,如果RUN指令在大文件操作之后清除,则所得到的层大小将会更小。 但是,当我执行以下脚本时,生成的图层很大,大致对应于最初复制和清理的文件的大小。

如果复制的文件在同一图层中被清除,怎么可能提交这个图层的大小呢?

RUN mkdir -p /etc/puppet && \ cd /etc/puppet && \ apt-get update && apt-get install -y wget puppet && \ wget -rnH --level=10 -e robots=off --reject "index.html*" http://somefileserver.org/puppet/allpuppetstuff && \ puppet module install puppetlabs/stdlib && \ puppet module install 7terminals-java && \ puppet apply -e "include someserver" && \ apt-get purge -y --auto-remove puppet wget && \ rm -rfv /etc/puppet/* && \ rm -rfv /var/lib/apt/lists/* 

几经调整后发现一些细节。

看起来,docker复制在旧的层上,如果一个新的层正在修改保持在较早的一个文件。 这是由上面的RUN命令创build的胖图层的原因,即使在操作结束时总文件大小差异最小。 我找不到任何明确的资源来援引这一点,但这是迄今为止的经验。

基本上,与图像相关的文件操作应该始终在一层完成。