Local cache
The local
cache store is a simple cache option that stores your cache as files
in a directory on your filesystem, using an
OCI image layout
for the underlying directory structure. Local cache is a good choice if you're
just testing, or if you want the flexibility to self-manage a shared storage
solution.
Synopsis
$ 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 .
The following table describes the available CSV parameters that you can pass to
--cache-to
and --cache-from
.
Name | Option | Type | Default | Description |
---|---|---|---|---|
src | cache-from | String | Path of the local directory where cache gets imported from. | |
digest | cache-from | String | Digest of manifest to import, see cache versioning. | |
dest | cache-to | String | Path of the local directory where cache gets exported to. | |
mode | cache-to | min ,max | min | Cache layers to export, see cache mode. |
oci-mediatypes | cache-to | true ,false | true | Use OCI media types in exported manifests, see OCI media types. |
image-manifest | cache-to | true ,false | false | When using OCI media types, generate an image manifest instead of an image index for the cache image, see OCI media types. |
compression | cache-to | gzip ,estargz ,zstd | gzip | Compression type, see cache compression. |
compression-level | cache-to | 0..22 | Compression level, see cache compression. | |
force-compression | cache-to | true ,false | false | Forcibly apply compression, see cache compression. |
ignore-error | cache-to | Boolean | false | Ignore errors caused by failed cache exports. |
If the src
cache doesn't exist, then the cache import step will fail, but the
build continues.
Cache versioning
This section describes how versioning works for caches on a local filesystem,
and how you can use the digest
parameter to use older versions of cache.
If you inspect the cache directory manually, you can see the resulting OCI image layout:
$ 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"
}
}
]
}
Like other cache types, local cache gets replaced on export, by replacing the
contents of the index.json
file. However, previous caches will still be
available in the blobs
directory. These old caches are addressable by digest,
and kept indefinitely. Therefore, the size of the local cache will continue to
grow (see
moby/buildkit#1896
for more information).
When importing cache using --cache-to
, you can specify the digest
parameter
to force loading an older version of the cache, for example:
$ 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 .
Further reading
For an introduction to caching see Docker build cache.
For more information on the local
cache backend, see the
BuildKit README.