如何减小 Docker 镜像大小

如何减小 Docker 镜像大小

我有一个运行 GlassFish 的容器。当我尝试提交一个图像时,它变成了 14GB。后来,我删除了/tmp/容器中 10GB 的文件并尝试提交一个图像,但图像仍然是 14GB。似乎从容器中删除文件并没有反映在图像大小中。我该如何解决这个问题?

答案1

您可能面临的问题是,删除提交中的文件不会改变该文件存在于先前映像中的事实,因此先前映像仍然是 14G。

看看这篇文章中的“层”部分:http://woudenberg.io/reducing-docker-image-size/

要解决该问题,您需要在生成它们的原始提交中删除 /tmp/ 下的内容,这样该提交所创建的映像就不会包含它们。使用 dockerfile 时这很容易,但不确定在使用提交创建映像时是否可行。

您可以做的另一件事是通过导出/导入图像来压缩图层。

答案2

扩展@Juan Antonio 的答案,Dockerfile这样做不会节省空间:

RUN apt-get install -y foo bar
...
RUN apt-get purge --auto-remove -y foo bar

你需要做的是:

RUN apt-get install -y foo bar && \
    && ... \
    && apt-get purge --auto-remove -y foo bar

不利的一面是,这意味着更少的缓存,因为如果大型命令行中发生任何变化,Docker 将不得不重新运行整个命令集。

答案3

dockerfile 中的每一行都会创建一个新层。因此,即使您尝试删除某些内容,它也会从上一步的层创建新层。请记住,层只是添加的,docker 不知道 rm 实际上在做什么,它只会将它们堆叠起来 sp 14gb + remove file == 14 gb + 新命令的元数据。为了解决这个问题,请尝试确保您按照 @Wernight 的建议在 docker 文件的行上添加和删除 tmp 文件夹。

相关内容