在追求越来越小的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
缓存(因此仅在开头更新一次)? 对我来说,似乎需要多次删除和更新
缓存只会减慢镜像构建的速度。
RUN rm -rf /var/lib/apt/lists/*
命令并不能真正缩小最终的映像,因为之前的层中APT缓存仍然存在? - jmd_dkRUN rm ...
步骤实际上并不会使镜像变小。 - David Maze,因此不需要显式调用。”这是否与
rm -rf /var/lib/apt/lists/*`无关? - Anonapt-get clean
会删除下载以安装软件包的安装程序文件。rm -rf /var/lib/apt/lists/*
会删除用于确定可安装软件包的列表。说实话,删除这些列表几乎不会节省多少空间,但如果您想制作最小的映像,尤其是如果您要发布供其他人使用的映像,这样做似乎是正确的选择。 - Ben XOapt-get install
的另一个原因是为了调试构建过程。如果您尝试安装100个软件包,但总是失败,那么您必须重新安装这100个软件包。将构建划分为两个或更多的RUN
可以将第一组已安装的内容缓存为镜像,同时您可以调试第二个组。一旦全部成功后,您可以选择将它们合并在一起。 - Daniel Griscom