是否可以从中间Docker层中完全删除文件?
例如我有:
Layer A: with BigFile
L Layer B: remove BigFile
L Layer C: builds on B
由于文件仍然存在于容器中,即使无法访问BigFile
,文件也存在于C
中。因此会增加整体图像尺寸。
我想从BigFile
上完全删除C
。
有什么解决方案?只是从一开始就将其从Layer A
中删除吗?
答案 0 :(得分:0)
有什么解决方案?只是要首先将其从A层中删除吗?
一旦文件位于图层中,就无法将其删除,但是如果您小心地在文件添加的同一构建步骤中删除文件 ,则该文件不会保留在构建步骤的层。
一个简单而常见的示例是运行apt get update,安装软件包,然后在同一RUN命令中全部删除软件包索引,以将apt索引保留在映像层之外。
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run详细讨论了此示例。
答案 1 :(得分:0)
要获取此信息,只要您不介意丢失图像缓存,就可以压缩图像。有两种方法可以做到这一点。
在docker build上使用实验性选项时,您将获得一个--squash
选项,该选项将删除所有中间层,并导致BigFile
不存在。
没有,您可以从C层创建一个容器,然后使用docker export和docker import来有效地删除所有层,如this answer
中所述