Docker buildkit缓存位置/大小和ID

lymgl2op  于 2023-10-16  发布在  Docker
关注(0)|答案(2)|浏览(113)

Docker buildkit:https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md有一个额外的选项RUN(除其他外):--mount=type=cache
我从文档中无法理解的是:
1.缓存在哪里
1.如何删除/检查它?

  1. buildkit如何决定哪些缓存放在哪里?例如,如果我在两个位置有相同的Dockerfile,缓存是否相同?该高速缓存的密钥是什么?
  2. ID选项仍然不明确。如果我在不同的dockerfile中指定相同的ID,它们会引用相同的缓存吗?
gupuwyp2

gupuwyp21#

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

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

flvlnr442#

对于#3,似乎当您没有为--mount选项指定id时,将使用相同的缓存,而不管任何其他参数,如挂载点或Dockerfile内容/路径。

相关问题