本機快取

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-fromString匯入快取的本地目錄路徑。
摘要cache-fromString要匯入的清單摘要(Digest),請參閱快取版本控制
destcache-toString匯出快取的本地目錄路徑。
模式cache-tomin,maxmin要匯出的快取層,請參閱快取模式
oci-mediatypescache-totrue,falsetrue在匯出的清單中使用 OCI 媒體類型,請參閱OCI 媒體類型
image-manifestcache-totrue,falsetrue使用 OCI 媒體類型時,為快取映像檔產生映像檔清單(Image Manifest)而非映像檔索引(Image Index),請參閱OCI 媒體類型
compressioncache-togzip,estargz,zstdgzip壓縮類型,請參閱快取壓縮
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 目錄中取得。這些舊快取可以透過摘要(digest)進行定址,並被無限期保留。因此,本地快取的大小將持續增長(更多資訊請參閱 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

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.