本地缓存
目录
local 缓存存储是一个简单的缓存选项,它将您的缓存作为文件存储在文件系统上的一个目录中,使用 OCI 镜像布局 作为底层目录结构。如果您只是进行测试,或者希望灵活地自行管理共享存储解决方案,本地缓存是一个不错的选择。
概要
$ docker buildx build --push -t <registry>/<image> \
--cache-to type=local,dest=path/to/local/dir[,parameters...] \
--cache-from type=local,src=path/to/local/dir .
下表描述了您可以传递给 --cache-to 和 --cache-from 的可用 CSV 参数。
| 名称 | 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|---|
src | cache-from | 字符串 | 导入缓存的本地目录路径。 | |
摘要 | cache-from | 字符串 | 要导入的清单摘要,请参阅缓存版本控制。 | |
dest | cache-to | 字符串 | 导出缓存的本地目录路径。 | |
mode | cache-to | min,max | min | 要导出的缓存层,请参阅 缓存模式。 |
oci-mediatypes | cache-to | true,false | true | 在导出清单中使用 OCI 媒体类型,请参阅OCI 媒体类型。 |
image-manifest | cache-to | true,false | true | 使用 OCI 媒体类型时,为缓存镜像生成一个镜像清单而不是镜像索引,请参阅OCI 媒体类型。 |
compression | cache-to | gzip、estargz、zstd | gzip | 压缩类型,请参阅缓存压缩。 |
compression-level | cache-to | 0..22 | 压缩级别,请参阅缓存压缩。 | |
force-compression | cache-to | true,false | false | 强制应用压缩,请参阅缓存压缩。 |
ignore-error | cache-to | 布尔值 | false | 忽略因缓存导出失败导致的错误。 |
如果 src 缓存不存在,则缓存导入步骤将失败,但构建会继续。
缓存版本控制
本节描述了本地文件系统上的缓存版本控制的工作原理,以及如何使用 digest 参数来使用旧版本的缓存。
如果您手动检查缓存目录,可以看到生成的 OCI 镜像布局
$ ls cache
blobs index.json ingest
$ cat cache/index.json | jq
{
"schemaVersion": 2,
"manifests": [
{
"mediaType": "application/vnd.oci.image.index.v1+json",
"digest": "sha256:6982c70595cb91769f61cd1e064cf5f41d5357387bab6b18c0164c5f98c1f707",
"size": 1560,
"annotations": {
"org.opencontainers.image.ref.name": "latest"
}
}
]
}
与其他缓存类型一样,本地缓存在导出时会通过替换 index.json 文件的内容来更新。但是,以前的缓存仍将保留在 blobs 目录中。这些旧缓存可以通过摘要寻址,并无限期保留。因此,本地缓存的大小将继续增长(有关更多信息,请参阅 moby/buildkit#1896)。
使用 --cache-from 导入缓存时,您可以指定 digest 参数来强制加载旧版本的缓存,例如
$ docker buildx build --push -t <registry>/<image> \
--cache-to type=local,dest=path/to/local/dir \
--cache-from type=local,ref=path/to/local/dir,digest=sha256:6982c70595cb91769f61cd1e064cf5f41d5357387bab6b18c0164c5f98c1f707 .
进一步阅读
有关缓存的介绍,请参阅 Docker 构建缓存。
有关 local 缓存后端的更多信息,请参阅 BuildKit README。