尽管我没有IT背景,但我已经使用Docker有一段时间了。
现在,我正在努力理解如何通过优化我的Dockerfile来最小化docker镜像的大小。在这方面,我遇到了一个我不理解的最小可重现的案例。如果有人能分享他的想法或提供解释,我将非常高兴。
我从官方centos:7镜像(7e6257c9f8d8; 203MB)开始,然后准备了以下Dockerfile:
FROM centos:7
RUN yum -y install nano && yum -y clean all && rm -fr /var/cache
RUN yum -y install which && yum -y clean all && rm -fr /var/cache
RUN yum -y install which && yum -y clean all && rm -fr /var/cache
这个想法是安装任何轻量级软件包,并评估其对镜像大小的影响。为此,我首先安装nano,然后在不同的标签中安装which。我额外尝试安装which(这表明没有什么可以做的)。此外,我添加了yum clean all语句以清除yum缓存,并且为了保险起见(尽管我刚刚检查过实验结果,如果我删除此命令,实验结果不会改变),我删除/var/cache目录(该目录在基本映像中为空)。
结果如下:
IMAGE CREATED CREATED BY SIZE
6a14537d3460 7 seconds ago /bin/sh -c yum -y install which && yum -y cl… 23.9MB
7d924cbdf819 22 seconds ago /bin/sh -c yum -y install which && yum -y cl… 24.2MB
2b5b04d37a64 42 seconds ago /bin/sh -c yum -y install nano && yum -y cle… 24.6MB
which 的安装大小为75k,nano 的安装大小为1.6M。我没有发现任何额外的已安装依赖项。
问题是:为什么即使没有实际安装任何软件包,每个安装命令都会将最终映像增加约24MB的层?
提前感谢社区:)
yum install
每层速度为2Mbs,而touch /some_file && rm /some_file
的速度则较慢,但这是由于docker存储层的本质原因。 - Alex Yu