首页 > 解决方案 > Docker buildkit 缓存位置/大小和 ID

问题描述

有 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,它们会引用相同的缓存吗?

标签: dockerdockerfile

解决方案


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

  1. 缓存使用与图像层相同的存储驱动程序。元数据存储在数据库中/var/lib/docker/buildkit。层本身通常位于/var/lib/docker/overlay2/<ID>/diff/. 对于<ID>,见下文。
  2. docker buildx du --verbose列出构建缓存。您也可以从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. 是的。target无论是Dockerfile 还是 Dockerfile ,它们都是相同的缓存。不同的构建器有自己的缓存,例如不同架构的缓存是分开的。

推荐阅读