Docker buildkit:https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md有一个额外的选项RUN
(除其他外):--mount=type=cache
。
我从文档中无法理解的是:
1.缓存在哪里
1.如何删除/检查它?
- buildkit如何决定哪些缓存放在哪里?例如,如果我在两个位置有相同的Dockerfile,缓存是否相同?该高速缓存的密钥是什么?
- ID选项仍然不明确。如果我在不同的dockerfile中指定相同的ID,它们会引用相同的缓存吗?
2条答案
按热度按时间gupuwyp21#
是的,它在Docker 20.10.5中有些模糊。可以使用一两个拉取请求来更新文档。
/var/lib/docker/buildkit
的数据库中。当docker使用overlay2
存储驱动时,层在/var/lib/docker/overlay2/<ID>/diff/
中。对于<ID>
,请参见下文。dockerd
配置中的/var/lib/docker
可能因data-root
而异。docker buildx [--builder name] du --verbose
列出了构建缓存。您还可以从docker system df -v --format '{{ .BuildCache | json }}'
检查docker驱动程序缓存。该高速缓存类型exec.cachemount
是RUN --mount type=cache
。您可以使用ID
查找图层,这与--mount id
中使用的图层不同。挂载类型由buildkit实现,因此docker run --mount
无法识别它。要摆脱它要么docker buildx prune
或docker build --no-cache
。1.该高速缓存键是来自
id=
的值。id
默认值为target
。当您需要在同一个target
上使用不同的缓存时,您需要指定id
。1.是的。无论
target
还是Dockerfile,它们都是相同的缓存。不同的构建器具有它们自己的高速缓存,其例如保持用于不同架构的高速缓存分开。flvlnr442#
对于#3,似乎当您没有为
--mount
选项指定id
时,将使用相同的缓存,而不管任何其他参数,如挂载点或Dockerfile内容/路径。