在寻求更小的Docker镜像时,通常会在安装软件包后删除apt
(用于基于Debian/Ubuntu的镜像)缓存。就像
RUN rm -rf /var/lib/apt/lists/*
我看到过一些Dockerfile
在每个包安装后都这样做(example),即与模式
# Install some package
RUN apt-get update \
&& apt-get install -y <some-package> \
&& rm -rf /var/lib/apt/lists/*
# Do something
...
# Install another package
RUN apt-get update \
&& apt-get install -y <another-package> \
&& rm -rf /var/lib/apt/lists/*
# Do something else
...
这样做有什么好处吗,而不是只在最后清理apt
缓存(因此只在开始时更新一次)?对我来说,似乎必须多次删除和x1m3 n1该高速缓存只会减慢图像构建的速度。
1条答案
按热度按时间6jygbczu1#
人们这样做的主要原因是最小化存储在特定Docker层中的数据量。当拉取一个docker镜像时,你必须拉取层的整个内容。
例如,想象图像中的以下两个层:
第一个RUN命令会生成一个包含列表的图层,即使下一个命令删除了这些文件(因此它们不可访问),任何使用您的图像的人也会一直将其拉取。最终,这些额外的文件只是浪费空间和时间。
另一方面
在单个图层中执行此操作,这些列表将在图层完成之前被删除,因此它们不会作为图像的一部分被推送或拉取。
那么,为什么有多个使用
apt-get install
的层呢?这可能是为了让人们可以更好地利用 * 其他 * 镜像中的层,因为Docker将在镜像之间共享相同的层,以保存服务器上的空间并加快构建和拉取。