docker buildx build
| 描述 | 開始建置 |
|---|---|
| 使用方式 | docker buildx build [選項] 路徑 | URL | - |
| 別名 | docker build docker builder build docker image build docker buildx b |
描述
docker buildx build 指令使用 BuildKit 開始建置。
選項
| 選項 | 預設值 | 描述 |
|---|---|---|
--add-host | 新增自訂的主機到 IP 映射 (格式:host:ip) | |
--allow | 允許額外的特權授權 (例如,network.host, security.insecure) | |
--annotation | 為映像檔新增註釋 | |
--attest | 證明參數 (格式:type=sbom,generator=image) | |
--build-arg | 設定建置時變數 | |
--build-context | 額外的建置上下文 (例如,name=path) | |
--cache-from | 外部快取來源 (例如,user/app:cache, type=local,src=path/to/dir) | |
--cache-to | 快取匯出目的地 (例如,user/app:cache, type=local,dest=path/to/dir) | |
--call | build | 設定評估建置的方法 (check, outline, targets) |
--cgroup-parent | 設定建置期間 RUN 指令的父 cgroup | |
--check | --call=check 的簡寫 | |
-f, --file | Dockerfile 的名稱 (預設:PATH/Dockerfile) | |
--iidfile | 將映像檔 ID 寫入檔案 | |
--label | 設定映像檔的中繼資料 | |
--load | --output=type=docker 的簡寫 | |
--metadata-file | 將建置結果中繼資料寫入檔案 | |
--network | 設定建置期間 RUN 指令的網路模式 | |
--no-cache | 建置映像檔時不使用快取 | |
--no-cache-filter | 不快取指定的階段 | |
-o, --output | 輸出目的地 (格式:type=local,dest=path) | |
--platform | 設定建置的目標平台 | |
--progress | auto | 設定進度輸出的類型 (auto, quiet, plain, tty, rawjson)。使用 plain 以顯示容器輸出 |
--provenance | --attest=type=provenance 的簡寫 | |
--pull | 始終嘗試拉取所有引用的映像檔 | |
--push | --output=type=registry 的簡寫 | |
-q, --quiet | 抑制建置輸出並在成功時印出映像檔 ID | |
--sbom | --attest=type=sbom 的簡寫 | |
--secret | 要公開給建置的密碼 (格式:id=mysecret[,src=/local/secret]) | |
--shm-size | 建置容器的共享記憶體大小 | |
--ssh | 要公開給建置的 SSH 代理程式 socket 或金鑰 (格式:default|<id>[=<socket>|<key>[,<key>]]) | |
-t, --tag | 名稱以及可選的標籤 (格式:name:tag) | |
--target | 設定要建置的目標建置階段 | |
--ulimit | Ulimit 選項 |
範例
新增項目至容器主機檔案 (--add-host)
您可以使用一個或多個 --add-host 旗標將其他主機新增到建置容器的 /etc/hosts 檔案中。此範例為名為 my-hostname 和 my_hostname_v6 的主機新增靜態位址
$ docker buildx build --add-host my_hostname=8.8.8.8 --add-host my_hostname_v6=2001:4860:4860::8888 .
如果您的建置需要連接到主機上執行的服務,您可以將 host-gateway 作為 --add-host 的特殊值。在以下範例中,建置容器會將 host.docker.internal 解析為主機的閘道 IP。
$ docker buildx build --add-host host.docker.internal=host-gateway .
您可以將 IPv6 位址用方括號括起來。= 和 : 都是有效的分隔符號。以下範例中的兩種格式都有效
$ docker buildx build --add-host my-hostname:10.180.0.1 --add-host my-hostname_v6=[2001:4860:4860::8888] .
建立註釋 (--annotation)
--annotation="key=value"
--annotation="[type:]key=value"將 OCI 註釋新增到映像檔索引、清單或描述符。以下範例將 foo=bar 註釋新增到映像檔清單
$ docker buildx build -t TAG --annotation "foo=bar" --push .
您可以選擇新增類型前綴以指定註釋的級別。預設情況下,映像檔清單會被註釋。以下範例將 foo=bar 註釋新增到映像檔索引而不是清單
$ docker buildx build -t TAG --annotation "index:foo=bar" --push .
您可以指定多種類型,以逗號 (,) 分隔,將註釋新增到多個映像檔組件。以下範例將 foo=bar 註釋新增到映像檔索引、描述符、清單
$ docker buildx build -t TAG --annotation "index,manifest,manifest-descriptor:foo=bar" --push .
您還可以在類型前綴的方括號 ([os/arch]) 中指定平台限定符,以將註釋應用於具有匹配平台的部分清單。以下範例僅將 foo=bar 註釋新增到具有 linux/amd64 平台的清單
$ docker buildx build -t TAG --annotation "manifest[linux/amd64]:foo=bar" --push .
平台限定符不支援萬用字元;您不能指定像 manifest[linux/*] 這樣的類型前綴,僅將註釋新增到以 linux 作為作業系統平台的清單。
有關註釋的更多資訊,請參閱註釋。
建立證明 (--attest)
--attest=type=sbom,...
--attest=type=provenance,...建立映像檔證明。BuildKit 目前支援
sbom- 軟體物料清單 (Software Bill of Materials)。使用
--attest=type=sbom在建置時為映像檔生成 SBOM。或者,您可以使用--sbom簡寫。有關更多資訊,請參閱此處。
provenance- SLSA 溯源 (SLSA Provenance)使用
--attest=type=provenance在建置時為映像檔生成溯源。或者,您可以使用--provenance簡寫。預設情況下,將為建置結果建立一個最小的溯源證明,此證明僅會附加到推送到註冊中心的映像檔。
有關更多資訊,請參閱此處。
允許額外的特權授權 (--allow)
--allow=ENTITLEMENT允許額外的特權授權。授權列表
network.host- 允許使用主機網路執行。security.insecure- 允許在沒有沙箱的情況下執行。請參閱相關的 Dockerfile 擴展。
要啟用授權,BuildKit 守護程式還需要使用 --allow-insecure-entitlement 允許它們 (請參閱create --buildkitd-flags)。
$ docker buildx create --use --name insecure-builder --buildkitd-flags '--allow-insecure-entitlement security.insecure'
$ docker buildx build --allow security.insecure .
設定建置時變數 (--build-arg)
您可以在 Dockerfile 中使用 ENV 指令定義變數值。這些值會保留在建置的映像檔中。通常,持久性並不是您想要的。使用者希望根據建置映像檔的主機以不同的方式指定變數。
一個很好的範例是 http_proxy 或用於拉取中間檔案的來源版本。ARG 指令允許 Dockerfile 作者定義使用者可以在建置時使用 --build-arg 旗標設定的值
$ docker buildx build --build-arg HTTP_PROXY=http://10.20.30.2:1234 --build-arg FTP_PROXY=http://40.50.60.5:4567 .
此旗標允許您傳遞建置時變數,這些變數在 Dockerfile 的 RUN 指令中像常規環境變數一樣被存取。這些值不像 ENV 值那樣持久存在於中間或最終映像檔中。您必須為每個建置參數新增 --build-arg。
使用此旗標不會改變您在建置過程迴響 Dockerfile 中的 ARG 行時看到的輸出。
有關使用 ARG 和 ENV 指令的詳細資訊,請參閱Dockerfile 參考。
您也可以在不帶值的情況下使用 --build-arg 旗標,在這種情況下,守護程式會將本地環境中的值傳播到其正在建置的 Docker 容器中
$ export HTTP_PROXY=http://10.20.30.2:1234
$ docker buildx build --build-arg HTTP_PROXY .
此範例類似於 docker run -e 的工作方式。有關更多資訊,請參閱 docker run 文件。
還有一些有用的內建建置參數,例如
BUILDKIT_CONTEXT_KEEP_GIT_DIR=<bool>:觸發 Git 上下文以保留.git目錄BUILDKIT_INLINE_CACHE=<bool>:是否將快取中繼資料內聯到映像檔配置中BUILDKIT_MULTI_PLATFORM=<bool>:無論是否多平台輸出,都選擇確定性輸出
$ docker buildx build --build-arg BUILDKIT_MULTI_PLATFORM=1 .
在Dockerfile 參考文件中了解有關內建建置參數的更多資訊。
額外的建置上下文 (--build-context)
--build-context=name=VALUE定義具有指定內容的額外建置上下文。在 Dockerfile 中,當使用 FROM name 或 --from=name 時,可以存取該上下文。如果 Dockerfile 定義了同名的階段,則會被覆寫。
值可以是
- 本地來源目錄
- 符合 OCI 配置的本地目錄
- 容器映像檔
- Git URL
- HTTP URL
使用本地路徑
公開次要本地來源目錄
$ docker buildx build --build-context project=path/to/project/source .
# docker buildx build --build-context project=https://github.com/myuser/project.git .
使用容器映像檔
使用 docker-image:// 方案。
將 alpine:latest 替換為固定的版本
$ docker buildx build --build-context alpine=docker-image://alpine@sha256:0123456789 .
# syntax=docker/dockerfile:1
FROM alpine
COPY --from=project myfile /使用 OCI 配置目錄作為建置上下文
使用 oci-layout:/// 方案。
從本地 符合 OCI 配置的目錄 獲取映像檔,可以透過標籤或摘要
$ docker buildx build --build-context foo=oci-layout:///path/to/local/layout:<tag>
$ docker buildx build --build-context foo=oci-layout:///path/to/local/layout@sha256:<digest>
# syntax=docker/dockerfile:1
FROM alpine
RUN apk add git
COPY --from=foo myfile /
FROM fooOCI 配置目錄必須符合 OCI 配置規範。
覆寫已配置的建置器實例 (--builder)
與 buildx --builder 相同。
使用外部快取來源進行建置 (--cache-from)
--cache-from=[NAME|type=TYPE[,KEY=VALUE]]使用外部快取來源進行建置。支援的類型為
registry可以從註冊中心上的快取清單或 (特殊) 映像檔配置匯入快取。local可以從先前使用--cache-to匯出的本地檔案匯入快取。gha可以從您 GitHub 儲存庫中先前使用--cache-to匯出的快取匯入快取。s3可以從您 S3 儲存桶中先前使用--cache-to匯出的快取匯入快取。azblob可以從您 Azure 儲存桶中先前使用--cache-to匯出的快取匯入快取。
如果未指定類型,則使用 registry 匯出器與指定的參考。
$ docker buildx build --cache-from=user/app:cache .
$ docker buildx build --cache-from=user/app .
$ docker buildx build --cache-from=type=registry,ref=user/app .
$ docker buildx build --cache-from=type=local,src=path/to/cache .
$ docker buildx build --cache-from=type=gha .
$ docker buildx build --cache-from=type=s3,region=eu-west-1,bucket=mybucket .
注意有關快取匯出器和可用屬性的更多資訊,請參閱快取儲存後端文件
將建置快取匯出到外部快取目的地 (--cache-to)
--cache-to=[NAME|type=TYPE[,KEY=VALUE]]將建置快取匯出到外部快取目的地。支援的類型為
registry將建置快取匯出到註冊中心中的快取清單。local將快取匯出到用戶端的本地目錄。inline將快取中繼資料寫入映像檔配置。gha透過 GitHub Actions Cache 服務 API 匯出快取。s3將快取匯出到 S3 儲存桶。azblob將快取匯出到 Azure 儲存桶。
$ docker buildx build --cache-to=user/app:cache .
$ docker buildx build --cache-to=type=inline .
$ docker buildx build --cache-to=type=registry,ref=user/app .
$ docker buildx build --cache-to=type=local,dest=path/to/cache .
$ docker buildx build --cache-to=type=gha .
$ docker buildx build --cache-to=type=s3,region=eu-west-1,bucket=mybucket .
注意有關快取匯出器和可用屬性的更多資訊,請參閱快取儲存後端文件
呼叫前端方法 (--call)
--call=[build|check|outline|targets]BuildKit 前端可以支援建置的替代執行模式,使用前端方法。前端方法是一種改變或擴展建置調用行為的方式,它允許您例如檢查、驗證或從建置生成替代輸出。
docker buildx build 的 --call 旗標讓您可以指定要執行的前端方法。如果未指定此旗標,則預設為執行建置並評估建置檢查。
對於 Dockerfile,可用的方法是
| 指令 | 描述 |
|---|---|
build (預設) | 執行建置並評估目前建置目標的建置檢查。 |
check | 評估整個 Dockerfile 或選定目標的建置檢查,但不執行建置。 |
outline | 顯示您可以為目標設定的建置參數及其預設值。 |
targets | 列出 Dockerfile 中的所有建置目標。 |
subrequests.describe | 列出目前前端支援的所有前端方法。 |
請注意,其他前端可能會實作這些或其他方法。要查看您正在使用的前端的可用方法列表,請使用 --call=subrequests.describe。
$ docker buildx build -q --call=subrequests.describe .
NAME VERSION DESCRIPTION
outline 1.0.0 List all parameters current build target supports
targets 1.0.0 List all targets current build supports
subrequests.describe 1.0.0 List available subrequest types
描述
--call=targets 和 --call=outline 方法包含建置目標和參數的描述 (如果可用)。描述是從 Dockerfile 中的註解生成的。FROM 指令前一行的註解成為建置目標的描述,ARG 指令前的註解成為建置參數的描述。註解必須以階段或參數的名稱開頭,例如
# syntax=docker/dockerfile:1
# GO_VERSION sets the Go version for the build
ARG GO_VERSION=1.22
# base-builder is the base stage for building the project
FROM golang:${GO_VERSION} AS base-builder當您執行 docker buildx build --call=outline 時,輸出會包含描述,如下所示
$ docker buildx build -q --call=outline .
TARGET: base-builder
DESCRIPTION: is the base stage for building the project
BUILD ARG VALUE DESCRIPTION
GO_VERSION 1.22 sets the Go version for the build
有關如何編寫 Dockerfile 說明文件的更多範例,請查看Docker 文件 的 Dockerfile。
呼叫:check (--check)
check 方法評估建置檢查而不執行建置。--check 旗標是 --call=check 的便捷簡寫。使用 check 方法可以在開始建置之前驗證建置配置。
$ docker buildx build -q --check https://github.com/docker/docs.git
WARNING: InvalidBaseImagePlatform
Base image wjdp/htmltest:v0.17.0 was pulled with platform "linux/amd64", expected "linux/arm64" for current build
Dockerfile:43
--------------------
41 | "#content/desktop/previous-versions/*.md"
42 |
43 | >>> FROM wjdp/htmltest:v${HTMLTEST_VERSION} AS test
44 | WORKDIR /test
45 | COPY --from=build /out ./public
--------------------
在未指定目標的情況下使用 --check 會評估整個 Dockerfile。如果您想評估特定目標,請使用 --target 旗標。
呼叫:outline
outline 方法會印出指定目標的名稱 (如果未指定 --target,則為預設目標),以及該目標使用的建置參數及其預設值 (如果已設定)。
以下範例顯示了預設目標 release 及其建置參數
$ docker buildx build -q --call=outline https://github.com/docker/docs.git
TARGET: release
DESCRIPTION: is an empty scratch image with only compiled assets
BUILD ARG VALUE DESCRIPTION
GO_VERSION 1.22 sets the Go version for the base stage
HUGO_VERSION 0.127.0
HUGO_ENV sets the hugo.Environment (production, development, preview)
DOCS_URL sets the base URL for the site
PAGEFIND_VERSION 1.1.0
這表示 release 目標可以使用這些建置參數進行配置
$ docker buildx build \
--build-arg GO_VERSION=1.22 \
--build-arg HUGO_VERSION=0.127.0 \
--build-arg HUGO_ENV=production \
--build-arg DOCS_URL=https://example.com \
--build-arg PAGEFIND_VERSION=1.1.0 \
--target release https://github.com/docker/docs.git
呼叫:targets
targets 方法列出 Dockerfile 中的所有建置目標。這些是您可以使用 --target 旗標建置的階段。它還會指示預設目標,即當您未指定目標時將建置的目標。
$ docker buildx build -q --call=targets https://github.com/docker/docs.git
TARGET DESCRIPTION
base is the base stage with build dependencies
node installs Node.js dependencies
hugo downloads and extracts the Hugo binary
build-base is the base stage for building the site
dev is for local development with Docker Compose
build creates production builds with Hugo
lint lints markdown files
test validates HTML output and checks for broken links
update-modules downloads and vendors Hugo modules
vendor is an empty stage with only vendored Hugo modules
build-upstream builds an upstream project with a replacement module
validate-upstream validates HTML output for upstream builds
unused-media checks for unused graphics and other media
pagefind installs the Pagefind runtime
index generates a Pagefind index
test-go-redirects checks that the /go/ redirects are valid
release (default) is an empty scratch image with only compiled assets
使用自訂父 cgroup (--cgroup-parent)
當您使用 --cgroup-parent 選項執行 docker buildx build 時,守護程式會使用對應的 docker run 旗標執行建置中使用的容器。
指定 Dockerfile (-f, --file)
$ docker buildx build -f <filepath> .
指定要使用的 Dockerfile 的檔案路徑。如果未指定,預設會使用建置上下文根目錄下名為 Dockerfile 的檔案。
要從標準輸入讀取 Dockerfile,您可以使用 - 作為 --file 的參數。
$ cat Dockerfile | docker buildx build -f - .
將單一平台建置結果載入到 docker images (--load)
--output=type=docker 的簡寫。將自動將單一平台建置結果載入到 docker images。
將建置結果中繼資料寫入檔案 (--metadata-file)
若要輸出建置中繼資料 (例如映像檔摘要),請傳遞 --metadata-file 旗標。中繼資料將作為 JSON 物件寫入指定的檔案。指定檔案的目錄必須已經存在並且可寫入。
$ docker buildx build --load --metadata-file metadata.json .
$ cat metadata.json
{
"buildx.build.provenance": {},
"buildx.build.ref": "mybuilder/mybuilder0/0fjb6ubs52xx3vygf6fgdl611",
"buildx.build.warnings": {},
"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"
}注意建置紀錄溯源 (
buildx.build.provenance) 預設包含最小溯源。設定BUILDX_METADATA_PROVENANCE環境變數以自訂此行為
min設定最小溯源 (預設)。max設定完整溯源。disabled、false或0不設定任何溯源。
注意建置警告 (
buildx.build.warnings) 預設不包含。將BUILDX_METADATA_WARNINGS環境變數設定為1或true以包含它們。
設定建置期間 RUN 指令的網路模式 (--network)
網路模式的可用選項為
default(預設):在預設網路中執行。none:在沒有網路存取權限的情況下執行。host:在主機的網路環境中執行。
在Dockerfile 參考中找到更多詳細資訊。
忽略特定階段的建置快取 (--no-cache-filter)
--no-cache-filter 讓您可以指定多階段 Dockerfile 中的一個或多個階段,其中應忽略建置快取。要指定多個階段,請使用逗號分隔語法
$ docker buildx build --no-cache-filter stage1,stage2,stage3 .
例如,以下 Dockerfile 包含四個階段
baseinstalltestrelease
# syntax=docker/dockerfile:1
FROM oven/bun:1 AS base
WORKDIR /app
FROM base AS install
WORKDIR /temp/dev
RUN --mount=type=bind,source=package.json,target=package.json \
--mount=type=bind,source=bun.lockb,target=bun.lockb \
bun install --frozen-lockfile
FROM base AS test
COPY --from=install /temp/dev/node_modules node_modules
COPY . .
RUN bun test
FROM base AS release
ENV NODE_ENV=production
COPY --from=install /temp/dev/node_modules node_modules
COPY . .
ENTRYPOINT ["bun", "run", "index.js"]要忽略 install 階段的快取
$ docker buildx build --no-cache-filter install .
要忽略 install 和 release 階段的快取
$ docker buildx build --no-cache-filter install,release .
--no-cache-filter 旗標的參數必須是階段的名稱。
設定建置結果的匯出動作 (-o, --output)
-o, --output=[PATH,-,type=TYPE[,KEY=VALUE]設定建置結果的匯出動作。當使用 docker 建置驅動程式時,預設輸出是一個匯出到本地映像檔儲存的容器映像檔。--output 旗標使此步驟可配置,允許將結果直接匯出到用戶端的檔案系統、OCI 映像檔 tar 壓縮檔、註冊中心等。
使用 docker 驅動程式的 Buildx 僅支援 local、tar 壓縮檔和映像檔匯出器。docker-container 驅動程式支援所有匯出器。
如果您僅將檔案路徑指定為 --output 的參數,Buildx 會使用本地匯出器。如果值是 -,Buildx 會使用 tar 匯出器並將輸出寫入標準輸出。
$ docker buildx build -o . .
$ docker buildx build -o outdir .
$ docker buildx build -o - . > out.tar
$ docker buildx build -o type=docker .
$ docker buildx build -o type=docker,dest=- . > myimage.tar
$ docker buildx build -t tonistiigi/foo -o type=registry
您可以透過重複旗標來匯出多個輸出。
支援的匯出類型為
local
local 匯出類型將所有結果檔案寫入用戶端上的目錄。新檔案將由目前使用者擁有。在多平台建置中,所有結果將按其平台放入子目錄中。
屬性鍵
dest- 檔案將被寫入的目標目錄
有關更多資訊,請參閱本地和 tar 匯出器。
tar
tar 匯出類型將所有結果檔案作為單一 tar 壓縮檔寫入用戶端。在多平台建置中,所有結果將按其平台放入子目錄中。
屬性鍵
dest- tar 壓縮檔將被寫入的目標路徑。「-」寫入標準輸出。
有關更多資訊,請參閱本地和 tar 匯出器。
oci
oci 匯出類型將結果映像檔或清單列表作為 OCI 映像檔配置 tar 壓縮檔寫入用戶端。
屬性鍵
dest- tar 壓縮檔將被寫入的目標路徑。「-」寫入標準輸出。
有關更多資訊,請參閱OCI 和 Docker 匯出器。
docker
docker 匯出類型將單一平台結果映像檔作為 Docker 映像檔規範 tar 壓縮檔寫入用戶端。此匯出器建立的 tar 壓縮檔也與 OCI 相容。
Docker Engine 中的預設映像檔儲存不支援載入多平台映像檔。您可以啟用 containerd 映像檔儲存,或直接推送到註冊中心以推送多平台映像檔,請參閱registry。
屬性鍵
dest- tar 壓縮檔將被寫入的目標路徑。如果未指定,tar 將自動載入到本地映像檔儲存中。context- 要匯入結果的 Docker 上下文名稱
有關更多資訊,請參閱OCI 和 Docker 匯出器。
image
image 匯出器將建置結果寫入為映像檔或清單列表。使用 docker 驅動程式時,映像檔將出現在 docker images 中。您可以選擇透過指定屬性來自動將映像檔推送到註冊中心。
屬性鍵
name- 新映像檔的名稱 (參考)。push- 布林值,用於自動推送映像檔。
有關更多資訊,請參閱映像檔和註冊中心匯出器。
registry
registry 匯出器是 type=image,push=true 的捷徑。
有關更多資訊,請參閱映像檔和註冊中心匯出器。
設定建置的目標平台 (--platform)
--platform=value[,value]設定建置的目標平台。Dockerfile 中所有沒有自己的 --platform 旗標的 FROM 指令將為此平台拉取基礎映像檔,此值也將是結果映像檔的平台。
預設值是執行建置的 BuildKit 守護程式的平台。該值採用 os/arch 或 os/arch/variant 的形式。例如,linux/amd64 或 linux/arm/v7。此外,--platform 旗標還支援特殊的 local 值,它會告訴 BuildKit 使用調用建置的 BuildKit 用戶端的平台。
當使用 buildx 和 docker-container 驅動程式時,此旗標可以接受多個值作為輸入,以逗號分隔。使用多個值時,結果將為所有指定的平台建置,並合併到單一清單列表中。
如果 Dockerfile 需要調用 RUN 指令,建置器需要對指定平台的執行時支援。在乾淨的設定中,您只能執行適用於您的系統架構的 RUN 指令。如果您的核心支援用於次要架構的 binfmt_misc 啟動器,buildx 將自動選取它們。Docker Desktop 版本會自動為 arm64 和 arm 架構配置 binfmt_misc。您可以透過執行 docker buildx inspect --bootstrap 查看目前建置器實例支援的執行時平台。
在 Dockerfile 內部,您可以透過 TARGETPLATFORM 建置參數存取目前的平台值。有關自動平台參數變體的完整描述,請參閱Dockerfile 參考。
您可以在 containerd 原始碼中找到平台指定符的格式定義。
$ docker buildx build --platform=linux/arm64 .
$ docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 .
$ docker buildx build --platform=darwin .
設定進度輸出的類型 (--progress)
--progress=VALUE設定進度輸出的類型。支援的值為
auto(預設):如果用戶端是 TTY,則使用tty模式,否則使用plaintty:具有顏色和重繪的互動式輸出串流plain:以純文字格式印出原始建置進度quiet:抑制建置輸出並在成功時印出映像檔 ID (與--quiet相同)rawjson:將原始建置進度印出為 JSON 行
注意您也可以使用
BUILDKIT_PROGRESS環境變數來設定其值。
以下範例在建置期間使用 plain 輸出
$ docker buildx build --load --progress=plain .
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 227B 0.0s done
#1 DONE 0.1s
#2 [internal] load .dockerignore
#2 transferring context: 129B 0.0s done
#2 DONE 0.0s
...
注意另請查看
BUILDKIT_COLORS環境變數以修改終端機輸出的顏色。
rawjson 輸出將 BuildKit 中的解決狀態事件轉換為 JSON 行。此模式設計為由外部程式讀取。
建立溯源證明 (--provenance)
--attest=type=provenance 的簡寫,用於配置建置結果的溯源證明。例如,--provenance=mode=max 可以用作 --attest=type=provenance,mode=max 的縮寫。
此外,--provenance 可以與布林值一起使用以啟用或禁用溯源證明。例如,--provenance=false 禁用所有溯源證明,而 --provenance=true 啟用所有溯源證明。
預設情況下,將為建置結果建立最小溯源證明。請注意,Docker Engine 中的預設映像檔儲存不支援證明。如果您使用預設映像檔儲存,溯源證明僅對直接推送到註冊中心的映像檔持久存在。或者,您可以切換到使用 containerd 映像檔儲存。
有關溯源證明的更多資訊,請參閱此處。
將建置結果推送到註冊中心 (--push)
--output=type=registry 的簡寫。將自動將建置結果推送到註冊中心。
建立 SBOM 證明 (--sbom)
--attest=type=sbom 的簡寫,用於配置建置結果的 SBOM 證明。例如,--sbom=generator=<user>/<generator-image> 可以用作 --attest=type=sbom,generator=<user>/<generator-image> 的縮寫。
此外,--sbom 可以與布林值一起使用以啟用或禁用 SBOM 證明。例如,--sbom=false 禁用所有 SBOM 證明。
請注意,Docker Engine 中的預設映像檔儲存不支援證明。溯源證明僅對直接推送到註冊中心的映像檔持久存在。或者,您可以切換到使用 containerd 映像檔儲存。
有關更多資訊,請參閱此處。
要公開給建置的密碼 (--secret)
--secret=[type=TYPE[,KEY=VALUE]向建置公開密碼 (驗證憑證、令牌)。密碼可以使用 Dockerfile 中 RUN --mount=type=secret 掛載掛載到建置中。有關如何使用建置密碼的更多資訊,請參閱建置密碼。
支援的類型為
如果未設定 type,Buildx 會嘗試自動偵測。如果設定了與 id 相同的鍵的環境變數,則 Buildx 會使用 type=env,並且變數值成為密碼。如果未設定此類環境變數,且未設定 type,則 Buildx 會回退到 type=file。
type=file
從檔案獲取建置密碼。
type=file 摘要
$ docker buildx build --secret [type=file,]id=<ID>[,src=<FILEPATH>] .
type=file 屬性
| 鍵 | 描述 | 預設值 |
|---|---|---|
id | 密碼的 ID。 | 不適用 (此鍵是必需的) |
src, source | 包含密碼值的檔案路徑 (絕對路徑或相對於目前工作目錄)。 | 如果未設定,則為 id。 |
type=file 用法
在以下範例中,type=file 自動偵測,因為沒有設定與 aws (ID) 匹配的環境變數。
$ docker buildx build --secret id=aws,src=$HOME/.aws/credentials .
# syntax=docker/dockerfile:1
FROM python:3
RUN pip install awscli
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \
aws s3 cp s3://... ...type=env
從環境變數獲取建置密碼。
type=env 摘要
$ docker buildx build --secret [type=env,]id=<ID>[,env=<VARIABLE>] .
type=env 屬性
| 鍵 | 描述 | 預設值 |
|---|---|---|
id | 密碼的 ID。 | 不適用 (此鍵是必需的) |
env, src, source | 獲取密碼的環境變數。 | 如果未設定,則為 id。 |
type=env 用法
在以下範例中,type=env 自動偵測,因為設定了與 id 匹配的環境變數。
$ SECRET_TOKEN=token docker buildx build --secret id=SECRET_TOKEN .
# syntax=docker/dockerfile:1
FROM node:alpine
RUN --mount=type=bind,target=. \
--mount=type=secret,id=SECRET_TOKEN,env=SECRET_TOKEN \
yarn run test在以下範例中,建置參數 SECRET_TOKEN 設定為包含環境變數 API_KEY 的值。
$ API_KEY=token docker buildx build --secret id=SECRET_TOKEN,env=API_KEY .
您也可以使用 src 或 source 指定環境變數的名稱
$ API_KEY=token docker buildx build --secret type=env,id=SECRET_TOKEN,src=API_KEY .
注意使用
src或source指定環境變數名稱時,您需要明確設定type=env,否則 Buildx 會假設密碼是type=file,並尋找名稱為src或source的檔案 (在此情況下,是相對於執行docker buildx build指令位置名為API_KEY的檔案)。
建置容器的共享記憶體大小 (--shm-size)
設定使用 RUN 指令時為建置容器分配的共享記憶體大小。
格式為 <數字><單位>。數字必須大於 0。單位是可選的,可以是 b (位元組)、k (千位元組)、m (百萬位元組) 或 g (十億位元組)。如果您省略單位,系統會使用位元組。
注意在大多數情況下,建議讓建置器自動確定適當的配置。僅當複雜建置情境需要特定的效能調優時,才應考慮手動調整。
要公開給建置的 SSH 代理程式 socket 或金鑰 (--ssh)
--ssh=default|<id>[=<socket>|<key>[,<key>]]當 Dockerfile 中的某些指令需要特定的 SSH 驗證時 (例如,複製私人儲存庫),這可能很有用。
--ssh 會將 SSH 代理程式 socket 或金鑰公開給建置,並且可以與 RUN --mount=type=ssh 掛載一起使用。
使用 SSH 代理程式 socket 存取 Gitlab 的範例
# syntax=docker/dockerfile:1
FROM alpine
RUN apk add --no-cache openssh-client
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
RUN --mount=type=ssh ssh -q -T git@gitlab.com 2>&1 | tee /hello
# "Welcome to GitLab, @GITLAB_USERNAME_ASSOCIATED_WITH_SSHKEY" should be printed here
# with the type of build progress is defined as `plain`.$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa
(Input your passphrase here)
$ docker buildx build --ssh default=$SSH_AUTH_SOCK .
標記映像檔 (-t, --tag)
$ docker buildx build -t docker/apache:2.0 .
此範例的建置方式與前一個範例相同,但它隨後會標記結果映像檔。儲存庫名稱將為 docker/apache,標籤為 2.0。
您可以為映像檔應用多個標籤。例如,您可以為新建立的映像檔應用 latest 標籤,並新增另一個引用特定版本的標籤。
例如,要將映像檔同時標記為 docker/fedora-jboss:latest 和 docker/fedora-jboss:v2.1,請使用以下指令
$ docker buildx build -t docker/fedora-jboss:latest -t docker/fedora-jboss:v2.1 .
指定目標建置階段 (--target)
當建置包含多個建置階段的 Dockerfile 時,使用 --target 選項按名稱指定一個中間建置階段作為結果映像檔的最終階段。建置器會跳過目標階段之後的指令。
FROM debian AS build-env
# ...
FROM alpine AS production-env
# ...$ docker buildx build -t mybuildimage --target build-env .
設定 ulimits (--ulimit)
--ulimit 會覆寫使用 RUN 指令時建置容器的預設 ulimits,並以軟限制和硬限制指定,例如:<類型>=<軟限制>[:<硬限制>],例如
$ docker buildx build --ulimit nofile=1024:1024 .
注意如果您未提供
硬限制,則軟限制將同時用於這兩個值。如果未設定ulimits,它們將從守護程式上設定的預設ulimits繼承。
注意在大多數情況下,建議讓建置器自動確定適當的配置。僅當複雜建置情境需要特定的效能調優時,才應考慮手動調整。