遠端 Bake 檔案定義
您可以直接從遠端 Git 儲存庫或 HTTPS URL 建置 Bake 檔案
$ docker buildx bake "https://github.com/docker/cli.git#v20.10.11" --print
#1 [internal] load git source https://github.com/docker/cli.git#v20.10.11
#1 0.745 e8f1871b077b64bcb4a13334b7146492773769f7 refs/tags/v20.10.11
#1 2.022 From https://github.com/docker/cli
#1 2.022 * [new tag] v20.10.11 -> v20.10.11
#1 DONE 2.9s
這會從指定的遠端位置取得 Bake 定義,並執行該檔案中定義的群組或目標。如果遠端 Bake 定義未指定建置情境,則會自動將情境設定為該 Git 遠端。例如,此案例使用了 https://github.com/docker/cli.git
{
"group": {
"default": {
"targets": ["binary"]
}
},
"target": {
"binary": {
"context": "https://github.com/docker/cli.git#v20.10.11",
"dockerfile": "Dockerfile",
"args": {
"BASE_VARIANT": "alpine",
"GO_STRIP": "",
"VERSION": ""
},
"target": "binary",
"platforms": ["local"],
"output": ["build"]
}
}
}使用本機情境 (context) 與遠端定義
使用遠端 Bake 定義進行建置時,您可能希望使用相對於執行 Bake 指令所在目錄的本機檔案。您可以使用 cwd:// 前綴將情境定義為相對於指令執行位置。
target "default" {
context = "cwd://"
dockerfile-inline = <<EOT
FROM alpine
WORKDIR /src
COPY . .
RUN ls -l && stop
EOT
}$ touch foo bar
$ docker buildx bake "https://github.com/dvdksn/buildx.git#bake-remote-example"
...
> [4/4] RUN ls -l && stop:
#8 0.101 total 0
#8 0.102 -rw-r--r-- 1 root root 0 Jul 27 18:47 bar
#8 0.102 -rw-r--r-- 1 root root 0 Jul 27 18:47 foo
#8 0.102 /bin/sh: stop: not found如果您想使用特定的本機目錄作為情境,可以在 cwd:// 前綴後附加路徑。請注意,如果您指定了路徑,該路徑必須位於指令執行所在的目錄內。如果您使用絕對路徑,或指向工作目錄之外的相對路徑,Bake 將會拋出錯誤。
本機命名情境
您也可以使用 cwd:// 前綴在 Bake 執行情境中將本機目錄定義為命名情境。
以下範例將 docs 情境定義為 ./src/docs/content,它是相對於執行 Bake 的目前工作目錄的命名情境。
target "default" {
contexts = {
docs = "cwd://src/docs/content"
}
dockerfile = "Dockerfile"
}相反地,如果您省略 cwd:// 前綴,路徑將會相對於建置情境進行解析。
指定要使用的 Bake 定義
當從遠端 Git 儲存庫載入 Bake 檔案時,如果該儲存庫包含多個 Bake 檔案,您可以使用 --file 或 -f 旗標來指定要使用的 Bake 定義
docker buildx bake -f bake.hcl "https://github.com/crazy-max/buildx.git#remote-with-local"
...
#4 [2/2] RUN echo "hello world"
#4 0.270 hello world
#4 DONE 0.3s結合本機與遠端 Bake 定義
您也可以透過 -f 配合 cwd:// 前綴,將遠端定義與本機定義結合使用。
假設目前工作目錄中有以下本機 Bake 定義
# local.hcl
target "default" {
args = {
HELLO = "foo"
}
}以下範例使用 -f 來指定兩個 Bake 定義
-f bake.hcl:此定義相對於 Git URL 進行載入。-f cwd://local.hcl:此定義相對於執行 Bake 指令的目前工作目錄進行載入。
docker buildx bake -f bake.hcl -f cwd://local.hcl "https://github.com/crazy-max/buildx.git#remote-with-local" --print
{
"target": {
"default": {
"context": "https://github.com/crazy-max/buildx.git#remote-with-local",
"dockerfile": "Dockerfile",
"args": {
"HELLO": "foo"
},
"target": "build",
"output": [
{
"type": "cacheonly"
}
]
}
}
}結合本機與遠端 Bake 定義的一種必要情況是:當您在 GitHub Actions 中使用遠端 Bake 定義進行建置,並希望使用 metadata-action 來產生標籤 (tags)、註釋 (annotations) 或標籤 (labels) 時。metadata action 會產生一個可供 Runner 本機 Bake 執行情境使用的 Bake 檔案。若要同時使用遠端定義與本機的「僅中繼資料」Bake 檔案,請指定兩個檔案,並為該中繼資料 Bake 檔案使用 cwd:// 前綴
- name: Build
uses: docker/bake-action@v6
with:
files: |
./docker-bake.hcl
cwd://${{ steps.meta.outputs.bake-file }}
targets: build私有儲存庫中的遠端定義
如果您想使用位於私有儲存庫中的遠端定義,可能需要在 Bake 取得定義時指定憑證。
如果您可以使用預設的 SSH_AUTH_SOCK 對私有儲存庫進行身份驗證,則無需為 Bake 指定任何額外的身份驗證參數。Bake 會自動使用您的預設 Agent Socket。
若要透過 HTTP Token 或自訂 SSH Agent 進行身份驗證,請使用下列環境變數來設定 Bake 的身份驗證策略