docker buildx bake

說明從檔案建置
用法docker buildx bake [選項] [目標...]
別名
docker buildx f

說明

Bake 是一個高階建置指令。每個指定的目標都會作為建置的一部分並行執行。

閱讀使用 Bake 的高階建置選項指南,以了解如何撰寫 bake 檔案。

注意

未來如有需要,`buildx bake` 指令可能會收到不相容的回溯功能。 我們正在尋求有關改進指令和進一步擴展功能的回饋。

選項

選項預設值說明
--allow允許建置存取指定的資源
--call建置設定評估建置的方法 (checkoutlinetargets)
--check--call=check 的簡寫
-f, --file建置定義檔案
--load--set=*.output=type=docker 的簡寫
--metadata-file將建置結果中繼資料寫入檔案
--no-cache建置映像檔時不使用快取
--print列印選項而不建置
--progressauto設定進度輸出的類型 (autoplainttyrawjson)。使用 plain 來顯示容器輸出
--provenance--set=*.attest=type=provenance 的簡寫
--pull永遠嘗試提取所有參考的映像檔
--push--set=*.output=type=registry 的簡寫
--sbom--set=*.attest=type=sbom 的簡寫
--set覆寫目標值(例如,targetpattern.key=value

範例

覆寫已設定的建置器執行個體 (--builder)

buildx --builder 相同。

叫用前端方法 (--call)

build --call 相同。

呼叫:check (--check)

build --check 相同。

指定建置定義檔案 (-f, --file)

使用 -f / --file 選項來指定要使用的建置定義檔案。該檔案可以是 HCL、JSON 或 Compose 檔案。如果指定多個檔案,則會讀取所有檔案並合併建置設定。

您可以傳遞要建置的目標名稱,以僅建置特定目標。以下範例建置在 docker-bake.dev.hcl 檔案中定義的 dbwebapp-release 目標

# docker-bake.dev.hcl
group "default" {
  targets = ["db", "webapp-dev"]
}

target "webapp-dev" {
  dockerfile = "Dockerfile.webapp"
  tags = ["docker.io/username/webapp"]
}

target "webapp-release" {
  inherits = ["webapp-dev"]
  platforms = ["linux/amd64", "linux/arm64"]
}

target "db" {
  dockerfile = "Dockerfile.db"
  tags = ["docker.io/username/db"]
}
$ docker buildx bake -f docker-bake.dev.hcl db webapp-release

有關更多詳細資訊,請參閱 Bake 檔案參考

將建置結果中繼資料寫入檔案 (--metadata-file)

類似於 buildx build --metadata-file,但會寫入每個目標的結果映射,例如

# docker-bake.hcl
group "default" {
  targets = ["db", "webapp-dev"]
}

target "db" {
  dockerfile = "Dockerfile.db"
  tags = ["docker.io/username/db"]
}

target "webapp-dev" {
  dockerfile = "Dockerfile.webapp"
  tags = ["docker.io/username/webapp"]
}
$ docker buildx bake --load --metadata-file metadata.json .
$ cat metadata.json
{
  "buildx.build.warnings": {},
  "db": {
    "buildx.build.provenance": {},
    "buildx.build.ref": "mybuilder/mybuilder0/0fjb6ubs52xx3vygf6fgdl611",
    "containerimage.config.digest": "sha256:2937f66a9722f7f4a2df583de2f8cb97fc9196059a410e7f00072fc918930e66",
    "containerimage.descriptor": {
      "annotations": {
        "config.digest": "sha256:2937f66a9722f7f4a2df583de2f8cb97fc9196059a410e7f00072fc918930e66",
        "org.opencontainers.image.created": "2022-02-08T21:28:03Z"
      },
      "digest": "sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3",
      "mediaType": "application/vnd.oci.image.manifest.v1+json",
      "size": 506
    },
    "containerimage.digest": "sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3"
  },
  "webapp-dev": {
    "buildx.build.provenance": {},
    "buildx.build.ref": "mybuilder/mybuilder0/kamngmcgyzebqxwu98b4lfv3n",
    "containerimage.config.digest": "sha256:9651cc2b3c508f697c9c43b67b64c8359c2865c019e680aac1c11f4b875b67e0",
    "containerimage.descriptor": {
      "annotations": {
        "config.digest": "sha256:9651cc2b3c508f697c9c43b67b64c8359c2865c019e680aac1c11f4b875b67e0",
        "org.opencontainers.image.created": "2022-02-08T21:28:15Z"
      },
      "digest": "sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74",
      "mediaType": "application/vnd.oci.image.manifest.v1+json",
      "size": 506
    },
    "containerimage.digest": "sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74"
  }
}

注意

建置記錄來源 (buildx.build.provenance) 預設包含最少的來源。設定 BUILDX_METADATA_PROVENANCE 環境變數來自訂此行為

  • min 設定最少的來源(預設)。
  • max 設定完整的來源。
  • disabledfalse0 不設定任何來源。

注意

建置警告 (buildx.build.warnings) 預設不包含在內。將 BUILDX_METADATA_WARNINGS 環境變數設定為 1true 以包含它們。

建置映像檔時不使用快取 (--no-cache)

build --no-cache 相同。建置映像檔時不使用快取。

列印選項而不建置 (--print)

以 JSON 格式列印要建置之目標的結果選項,而不開始建置。

$ docker buildx bake -f docker-bake.hcl --print db
{
  "group": {
    "default": {
      "targets": [
        "db"
      ]
    }
  },
  "target": {
    "db": {
      "context": "./",
      "dockerfile": "Dockerfile",
      "tags": [
        "docker.io/tiborvass/db"
      ]
    }
  }
}

設定進度輸出的類型 (--progress)

build --progress 相同。

建立來源證明 (--provenance)

build --provenance 相同。

永遠嘗試提取較新版本的映像檔 (--pull)

build --pull 相同。

建立 SBOM 證明 (--sbom)

build --sbom 相同。

從命令列覆寫目標設定 (--set)

--set targetpattern.key[.subkey]=value

從命令列覆寫目標設定。模式匹配語法定義於 https://go.dev.org.tw/pkg/path/#Match

$ docker buildx bake --set target.args.mybuildarg=value
$ docker buildx bake --set target.platform=linux/arm64
$ docker buildx bake --set foo*.args.mybuildarg=value # overrides build arg for all targets starting with 'foo'
$ docker buildx bake --set *.platform=linux/arm64     # overrides platform for all targets
$ docker buildx bake --set foo*.no-cache              # bypass caching only for targets starting with 'foo'

您可以覆寫以下欄位

  • args(參數)
  • cache-from(快取來源)
  • cache-to(快取目標)
  • context(上下文)
  • dockerfile(Dockerfile)
  • labels(標籤)
  • load(載入)
  • no-cache(不使用快取)
  • no-cache-filter(快取過濾器)
  • output(輸出)
  • platform(平台)
  • pull(提取)
  • push(推送)
  • secrets(機密)
  • ssh(SSH)
  • tags(標籤)
  • target(目標)