我有一个运行 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 文件夹。