docker - Docker buildkit 缓存位置/大小和 ID
问题描述
有 Docker buildkit:https ://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md
,其中有一个额外的选项RUN
(其中包括)--mount=type=cache
:.
我从文档中无法弄清楚的是:
- 该缓存存储在哪里?
- 怎么能删除/检查呢?
- buildkit 如何决定什么缓存去哪里?例如,如果我在两个位置有相同的 Dockerfile,缓存是否相同?缓存的关键是什么?
- ID 选项仍然不明确。如果我在不同的 dockerfile 中指定相同的 ID,它们会引用相同的缓存吗?
解决方案
是的,在 docker 20.10.5 中有点模糊。可以使用一两个拉取请求来更新文档。
- 缓存使用与图像层相同的存储驱动程序。元数据存储在数据库中
/var/lib/docker/buildkit
。层本身通常位于/var/lib/docker/overlay2/<ID>/diff/
. 对于<ID>
,见下文。 docker buildx du --verbose
列出构建缓存。您也可以从docker system df -v --format '{{ .BuildCache | json }}'
. 缓存类型exec.cachemount
是RUN --mount type=cache
. 您可以使用 找到图层ID
,这与 中使用的不同--mount id
。挂载类型由 buildkit 实现,因此docker run --mount
无法识别。要摆脱它要么docker buildx prune
要么docker build --no-cache
。- 缓存键是来自 的值
id=
。id
默认值为target
. 您需要指定id
何时需要同时使用不同的缓存target
。 - 是的。
target
无论是Dockerfile 还是 Dockerfile ,它们都是相同的缓存。不同的构建器有自己的缓存,例如不同架构的缓存是分开的。
推荐阅读
- powershell - 为环境中的多台机器生成所有自签名证书的列表?
- r - 我试图弄清楚是否允许 GoogleNews 进行网络抓取
- javascript - 为什么不修改字符串的每个字符?
- matlab - 一个循环在 Batch 中运行多少次,池为 2?
- typescript - 有没有更好的方法来循环遍历数组以检查重复项?
- asp.net - 在带有 Razor 应用程序的 ASP.NET Core 中路由默认标识页面的问题
- android - Resources$NotFoundException: 带有 Toast.makeText 的字符串资源 ID #0x0
- javascript - 从 Firestore 返回查询的问题
- amazon-web-services - 通过 AWS CLI 将大型 DynamoDB 表索引到 Cloudsearch
- jquery - 从网页获取链接