本地快取

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 引數。

名稱選項型別預設值描述
srccache-from字串匯入快取的本地目錄路徑。
摘要cache-from字串要匯入的清單摘要,請參閱快取版本控制
destcache-to字串匯出快取的本地目錄路徑。
modecache-tomin,maxmin要匯出的快取層,請參閱 快取模式
oci-mediatypescache-totrue,falsetrue在匯出清單中使用 OCI 媒體型別,請參閱OCI 媒體型別
image-manifestcache-totrue,falsetrue使用 OCI 媒體型別時,為快取映象生成一個映象清單而不是映象索引,請參閱OCI 媒體型別
compressioncache-togzipestargzzstdgzip壓縮型別,請參閱快取壓縮
compression-levelcache-to0..22壓縮級別,請參閱快取壓縮
force-compressioncache-totrue,falsefalse強制應用壓縮,請參閱快取壓縮
ignore-errorcache-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