本機快取
目錄
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 | String | 匯入快取的本地目錄路徑。 | |
摘要 | cache-from | String | 要匯入的清單摘要(Digest),請參閱快取版本控制。 | |
dest | cache-to | String | 匯出快取的本地目錄路徑。 | |
模式 | cache-to | min,max | min | 要匯出的快取層,請參閱快取模式。 |
oci-mediatypes | cache-to | true,false | true | 在匯出的清單中使用 OCI 媒體類型,請參閱OCI 媒體類型。 |
image-manifest | cache-to | true,false | true | 使用 OCI 媒體類型時,為快取映像檔產生映像檔清單(Image Manifest)而非映像檔索引(Image Index),請參閱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 目錄中取得。這些舊快取可以透過摘要(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。