Docker buildkit 缓存位置/大小和 ID

use*_*175 6 docker dockerfile

有 Docker buildkit:https : //github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md 它有一个额外的选项RUN(除其他外):--mount=type=cache.

我从文档中无法弄清楚的是:

  1. 该缓存存储在哪里?
  2. 如何删除/检查它?
  3. buildkit 如何决定缓存去哪里?例如,如果我在两个位置有相同的 Dockerfile,缓存是否相同?缓存的关键是什么?
  4. ID 选项仍然不明确。如果我在不同的 dockerfile 中指定相同的 ID,它们会引用相同的缓存吗?

Mar*_*ala 18

是的,在 docker 20.10.5 中有点模糊。可以使用一两个拉取请求来更新文档。

  1. 驱动docker程序缓存使用与图像层相同的存储驱动程序。元数据存储在位于 的数据库中/var/lib/docker/buildkit。当docker使用overlay2存储驱动时,该层位于/var/lib/docker/overlay2/<ID>/diff/. 对于<ID>,请参见下文。可能会因您的配置/var/lib/docker而异。使用或驱动程序的构建器将数据保存在卷上。data-rootdockerddocker-containerkubernetes
  2. docker buildx [--builder name] du --verbose列出构建缓存。您还可以检查 docker 驱动程序缓存docker system df -v --format '{{ .BuildCache | json }}'。缓存类型exec.cachemountRUN --mount type=cache. 您可以使用 找到图层ID,它与 中使用的图层不同--mount id。挂载类型是由buildkit实现的,因此docker run --mount无法识别它。要么摆脱它,docker buildx prune要么docker build --no-cache
  3. 缓存键是来自 的值id=id默认为 的值target。您需要指定id何时需要同时使用不同的缓存target
  4. 是的。无论 Dockerfile 是什么,它们都是相同的缓存target。不同的构建器有自己的缓存,例如不同架构的缓存是分开的。


use*_*175 0

对于#3,似乎当您没有指定该id选项时--mount,将使用相同的缓存,无论任何其他参数如何,例如安装点或 Dockerfile 内容/路径。