Docker:从中间层删除文件

时间:2019-01-01 19:28:32

标签: docker

是否可以从中间Docker层中完全删除文件?

例如我有:

Layer A: with BigFile
 L Layer B: remove BigFile
   L Layer C: builds on B

由于文件仍然存在于容器中,即使无法访问BigFile,文件也存在于C中。因此会增加整体图像尺寸。

我想从BigFile上完全删除C

有什么解决方案?只是从一开始就将其从Layer A中删除吗?

2 个答案:

答案 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

中所述