使用匯出器要指定匯出器,請使用以下指令語法
大多數常見的應用情境不需要您明確指定要使用哪個匯出器。您只需要在您想要自訂輸出,或者想要將其儲存到磁碟時才需要指定匯出器。 --load
和 --push
選項允許 Buildx 推斷要使用的匯出器設定。
例如,如果您將 --push
選項與 --tag
結合使用,Buildx 會自動使用 image
匯出器,並將匯出器設定為將結果推送至指定的儲存庫。
要充分利用 BuildKit 提供的各種匯出器,您可以使用 --output
旗標來設定匯出器選項。
每種類型的匯出器都適用於不同的使用案例。以下章節說明一些常見的情境,以及如何使用匯出器來產生您需要的輸出。
Buildx 通常用於建置可以載入到映像檔儲存區的容器映像檔。這就是 docker
匯出器的用武之地。以下範例顯示如何使用 docker
匯出器建置映像檔,並使用 --output
選項將該映像檔載入到本機映像檔儲存區
如果您提供 --tag
和 --load
選項,Buildx CLI 將會自動使用 docker
匯出器並將其載入到映像檔儲存區
使用 docker
驅動程式建置的映像檔會自動載入到本機映像檔儲存區。
載入到映像檔儲存區的映像檔在建置完成後即可立即用於 docker run
,當您執行 docker images
指令時,您會在映像檔列表中看到它們。
要將建置的映像檔推送至容器儲存庫,您可以使用 registry
或 image
匯出器。
當您將 --push
選項傳遞給 Buildx CLI 時,您指示 BuildKit 將建置的映像檔推送至指定的儲存庫
在底層,這會使用 image
匯出器,並設定 push
參數。這與使用 --output
選項的以下長格式指令相同
您也可以使用 `registry` exporter,它的功能相同。
您可以使用 `oci` 或 `docker` exporter 將構建結果儲存到本地檔案系統的映像佈局中。這兩個 exporter 都會產生一個包含相應映像佈局的 tar 封存檔。`dest` 參數定義了 tarball 的目標輸出路徑。
如果您不想從構建結果構建映像,而是要匯出已構建的檔案系統,則可以使用 `local` 和 `tar` exporter。
`local` exporter 會將檔案系統解壓縮到指定位置的目錄結構中。`tar` exporter 會建立一個 tarball 封存檔。
`local` exporter 在多階段構建中非常有用,因為它允許您僅匯出最少數量的構建產物,例如自包含的二進制檔案。
如果您只想運行構建,而不匯出任何輸出,則可以使用 `cacheonly` exporter。例如,如果您想運行測試構建,或者如果您想先運行構建,然後使用後續命令建立匯出,這會很有用。`cacheonly` exporter 會建立一個構建快取,因此任何後續構建都會立即完成。
如果您沒有指定 exporter,也沒有提供像 `--load` 這樣的速記選項(會自動選擇適當的 exporter),Buildx 預設會使用 `cacheonly` exporter。除非您使用 `docker` 驅動程式進行構建,否則您會使用 `docker` exporter。
當使用 `cacheonly` 作為預設值時,Buildx 會記錄一條警告訊息。
您可以透過多次指定 `--output` 旗標,為任何給定的構建使用多個 exporter。這需要 **Buildx 和 BuildKit** 版本 0.13.0 或更高版本。
以下範例使用三個不同的 exporter 運行單個構建:
- `registry` exporter 將映像推送到 registry。
- `local` exporter 將構建結果提取到本地檔案系統。
- `--load` 旗標(`image` exporter 的速記)將結果載入到本地映像儲存庫。
本節說明 exporter 可用的一些組態選項。
這裡描述的選項至少適用於兩種或多種類型的 exporter。此外,不同的 exporter 類型也支援特定的參數。有關哪些組態參數適用的更多資訊,請參閱關於每個 exporter 的詳細頁面。
這裡描述的通用參數為:
當您匯出壓縮輸出時,您可以設定要使用的確切壓縮演算法和級別。雖然預設值提供了良好的開箱即用體驗,但您可能希望調整參數以優化儲存空間與計算成本。更改壓縮參數可以減少所需的儲存空間,並縮短映像下載時間,但會增加構建時間。
要選擇壓縮演算法,您可以使用 `compression` 選項。例如,要使用 `compression=zstd` 構建 `image`:
將 `compression-level=<value>` 選項與 `compression` 參數一起使用,為支援它的演算法選擇壓縮級別:
- `gzip` 和 `estargz` 為 0-9
- `zstd` 為 0-22
一般來說,數字越高,產生的檔案越小,壓縮運行的時間越長。
如果要求的壓縮演算法與先前的壓縮演算法不同,請使用 `force-compression=true` 選項強制重新壓縮從先前映像匯入的圖層。
注意
`gzip` 和 `estargz` 壓縮方法使用 `compress/gzip` 套件,而 `zstd` 使用 `github.com/klauspost/compress/zstd` 套件