ubuntu 重复apt缓存清理的好处

h5qlskok  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(172)

在寻求更小的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该高速缓存只会减慢图像构建的速度。

6jygbczu

6jygbczu1#

人们这样做的主要原因是最小化存储在特定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的层呢?这可能是为了让人们可以更好地利用 * 其他 * 镜像中的层,因为Docker将在镜像之间共享相同的层,以保存服务器上的空间并加快构建和拉取。

相关问题