gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:18:12 28 4
gpt4 key购买 nike

在寻求更小的 Docker 镜像时,删除 apt 是很常见的。 (对于基于 Debian/Ubuntu 的图像)安装软件包后的缓存。就像是

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

我见过几个 Dockerfile s 在每个软件包安装后完成( 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 层中的数据量。拉取 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 将在镜像之间共享层,以节省服务器空间并加快构建和拉取速度。

关于Dockerfile:重复 apt 缓存清理的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61990329/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com