代码之家  ›  专栏  ›  技术社区  ›  Snowcrash

Docker:从中间层删除文件

  •  0
  • Snowcrash  · 技术社区  · 7 年前

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

    E、 g.我有:

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

    BigFile 无法访问,它存在于 C . 因此增加了整体图像的大小。

    不过,我想去掉 巨型文件 完全来自 C类 .

    解决办法是什么?只是把它从 Layer A 首先呢?

    1 回复  |  直到 7 年前
        1
  •  1
  •   erik258    7 年前

    解决办法是什么?一开始只是把它从A层移走吗?

    一旦文件在一个层中,它就不能被删除,但是如果你小心地删除这个文件 在同一个构建步骤中,他们添加了 ,它不会被持久化在该生成步骤的层中。

    简单、常见的示例是运行apt get update,安装包,然后在同一个run命令中删除包索引,以使apt索引不在映像层中。

    https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run 更多地讨论这个例子。

        2
  •  0
  •   Rory McCune    6 年前

    为此,只要不介意丢失图像缓存,就可以挤压图像。有几种方法可以做到这一点。

    使用docker build上的实验选项,您将获得 --squash 删除所有中间层并将导致 BigFile 不在场。

    如果不这样做,您可以从C层创建一个容器,然后使用docker export和docker import有效地删除所有层,如中所述 this answer

    推荐文章