Dockerfile:重复进行apt缓存清理的好处

问题描述 投票:0回答:1

为了获得越来越小的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缓存(因此仅在开始时对其进行一次更新)?对我来说,好像必须多次删除并缓存update,这只会减慢图像生成速度。

docker ubuntu debian dockerfile apt
1个回答
0
投票

人们这样做的主要原因是最大程度地减少了存储在该特定docker层中的数据量。拉出docker映像时,必须拉出图层的全部内容。

例如,想象图像中的以下两层:

RUN apt-get update
RUN rm -rf /var/lib/apt/lists/*

第一个RUN命令会生成一个包含列表的层,即使下一个命令删除了这些文件(因此它们也无法访问),使用该图像的任何人都将始终将其拉出。最终,这些多余的文件只是浪费时间和空间。

另一方面,

RUN apt-get update && rm -rf /var/lib/apt/lists/*

在单个图层中进行操作,这些列表在图层完成之前会被删除,因此它们永远不会作为图像的一部分被推入或拉出。

所以,为什么要使用apt-get install的多层?这可能是为了使人们可以更好地利用other映像中的层,因为Docker将在映像之间共享相同的层,如果它们相同,则可以节省服务器上的空间并加快构建和拉动。

© www.soinside.com 2019 - 2024. All rights reserved.