BuildKit 是一個工具包,用於以高效、富有表現力和可重複的方式將原始程式碼轉換為建置工件。
主要特點:
自動垃圾收集
可擴展的前端格式
並發依賴解析
高效率的指令緩存
建構快取導入/導出
巢狀建置作業調用
可分配的工人
多種輸出格式
可插拔架構
無root權限執行
閱讀 moby/moby#32925 的提案
介紹部落格文章 https://blog.mobyproject.org/introducing-buildkit-17e056cc5317
加入 Docker Community Slack 上的#buildkit
頻道
筆記
如果您存取此儲存庫以使用僅限 BuildKit 的 Dockerfile 功能,例如RUN --mount=type=(bind|cache|tmpfs|secret|ssh)
,請參閱 Dockerfile 參考。
筆記
從 Docker Engine 23.0 開始, docker build
預設使用 Buildx 和 BuildKit。除非您想使用功能齊全的獨立版本的 BuildKit,否則您不需要閱讀本文檔。
使用者
快速啟動
圖像/註冊表
本地目錄
Docker 壓縮包
OCI 壓縮包
容器鏡像存儲
使用buildctl
建置 Dockerfile
使用外部前端建置 Dockerfile
Linux設定
Windows 設定
macOS 設定
從原始碼構建
探索法學學士
探索 Dockerfile
輸出
快取
內聯(將映像和快取推送到一起)
註冊表(分別推送鏡像和快取)
本地目錄
GitHub Actions 快取(實驗)
S3 緩存(實驗性)
Azure Blob 儲存快取(實驗性)
垃圾收集
匯出快取
一致的散列
元數據
Systemd 套接字激活
將 BuildKit 公開為 TCP 服務
負載平衡
容器化 BuildKit
波德曼
內德特爾
庫伯內斯
無守護程式
開放遙測支持
在沒有 root 權限的情況下執行 BuildKit
建構多平台鏡像
顏色輸出控制
日誌行數(對於 tty 模式下的活動步驟)
配置buildctl
貢獻
BuildKit 由下列項目使用:
Moby 和 Docker ( DOCKER_BUILDKIT=1 docker build
)
影像
OpenFaaS 雲
容器建置介面
Tekton Pipelines(以前稱為 Knative 建造模板)
Sanic 建構工具
瓦布
裡約
金
袋容器
Docker 建置x
奧克特托雲
地球檔案
吉特波德
匕首
環境變數
倉庫
命名空間
尤尼克拉夫特
開發者零
達克
有關 Kubernetes 部署,請參閱examples/kubernetes
。
BuildKit 由buildkitd
守護程式和buildctl
客戶端組成。雖然buildctl
用戶端可用於 Linux、macOS 和 Windows,但buildkitd
守護程式目前僅適用於 Linux 和 *Windows。
此處提供適用於 Linux、macOS 和 Windows 的最新 BuildKit 二進位。
buildkitd
守護程式需要安裝以下元件:
runc 或 crun
容器(如果你想使用容器工作)
啟動buildkitd
守護程式:您需要在主機上以root使用者身分執行buildkitd
。
$ sudo buildkitd
若要以非 root 使用者身分執行buildkitd
,請參閱docs/rootless.md
。
buildkitd 守護程式支援兩個工作後端:OCI (runc) 和 containerd。
預設情況下,使用 OCI (runc) 工作執行緒。您可以設定--oci-worker=false --containerd-worker=true
以使用containerd工作人員。
我們願意添加更多後端。
若要使用 systemd 套接字啟動來啟動 buildkitd 守護進程,您可以安裝 buildkit systemd 單元檔案。請參閱 Systemd 套接字激活
預設情況下,buildkitd 守護程式偵聽/run/buildkit/buildkitd.sock
上的 gRPC API,但您也可以使用 TCP 套接字。請參閱將 BuildKit 公開為 TCP 服務。
請參閱docs/windows.md
中的說明和註解。
Homebrew 公式(非官方)適用於 macOS。
$brew安裝buildkit
Homebrew 公式不包含守護程序 ( buildkitd
)。
例如,Lima 可用於在 Linux VM 內啟動守護程式。
brew install limalimactl 啟動範本://buildkitexport BUILDKIT_HOST="unix://$HOME/.lima/buildkit/sock/buildkitd.sock"
若要從原始程式碼建立 BuildKit,請參閱.github/CONTRIBUTING.md
。
有關buildctl
參考,請參閱此文件。
BuildKit 建構基於稱為 LLB 的二進位中間格式,用於定義運行建置部分的進程的依賴關係圖。 tl;dr:LLB 之於 Dockerfile 就像 LLVM IR 之於 C。
編組為 Protobuf 訊息
並發可執行
高效可緩存
供應商中立(即非 Dockerfile 語言可以輕鬆實現)
有關格式定義,請參閱solver/pb/ops.proto
,有關範例LLB應用程序,請參閱./examples/README.md
。
目前,LLB已實現以下高階語言:
Dockerfile(請參閱探索 Dockerfile)
建置包
莫克文件
戈克菲勒
bldr(Pkg 檔案)
HLB
地球檔案(地球)
貨運碼頭(鐵鏽)
尼克
莫伊 (Python)
envd(星雀)
大聲哭
低音
kraft.yaml (Unikraft)
r2d4/llb(JSON 網關)
(開啟 PR 新增您自己的語言)
前端是在 BuildKit 內運作並將任何建置定義轉換為 LLB 的元件。有一個名為 gateway ( gateway.v0
) 的特殊前端,它允許使用任何圖像作為前端。
在開發過程中,Dockerfile 前端 ( dockerfile.v0
) 也是 BuildKit 儲存庫的一部分。將來,這將被移出,並且可以使用外部映像建立 Dockerfile。
buildctl
建置 Dockerfile構建ctl構建 --frontend=dockerfile.v0 --本地上下文=。 --local dockerfile=.# orbuildctl 構建 --frontend=dockerfile.v0 --本地上下文=。 --本機 dockerfile=. --opt 目標=foo --opt 建置參數:foo=bar
--local
將本機來源檔案從客戶端公開給建構器。 context
和dockerfile
是 Dockerfile 前端查找建置上下文和 Dockerfile 位置的名稱。
如果 Dockerfile 有不同的檔案名,可以使用--opt filename=./Dockerfile-alternative
指定。
Dockerfile 前端的外部版本被推送到 https://hub.docker.com/r/docker/dockerfile-upstream 和 https://hub.docker.com/r/docker/dockerfile,並且可以與網關前端一起使用。外部前端的來源目前位於./frontend/dockerfile/cmd/dockerfile-frontend
中,但將來會移出此儲存庫 (#163)。對於從此儲存庫的 master 分支自動構建,可以使用docker/dockerfile-upstream:master
或docker/dockerfile-upstream:master-labs
映像。
構建ctl構建 --前端閘道.v0 --opt 來源=docker/dockerfile --本地上下文=。 --本機 dockerfile=. 構建ctl構建 --前端閘道.v0 --opt 來源=docker/dockerfile --opt context=https://github.com/moby/moby.git --opt build-arg:APT_MIRROR=cdn-fastly.deb.debian.org
預設情況下,建置結果和中間快取將僅保留在 BuildKit 內部。需要指定輸出來檢索結果。
buildctl build ... --output type=image,name=docker.io/username/image,push=true
若要將映像匯出至多個註冊表:
buildctl build ... --output type=image,"name=docker.io/username/image,docker.io/username2/image2",push=true
要將嵌入的快取與映像一起匯出並將它們一起推送到註冊表,需要輸入registry
來匯入緩存,您應該指定--export-cache type=inline
和--import-cache type=registry,ref=...
。若要將快取直接匯出到本機,您應該指定--export-cache type=local
。匯出快取中的詳細資訊。
buildctl 建造... --輸出類型=映像,名稱=docker.io/使用者名稱/映像,push=true --匯出快取類型=內聯 --import-cache type=registry,ref=docker.io/使用者名稱/image
影像輸出支援的按鍵:
name=
:指定映像名稱
push=true
: 建立鏡像後推播
push-by-digest=true
: 推送未命名的圖像
registry.insecure=true
:推送到不安全的 HTTP 註冊表
oci-mediatypes=true
:在設定 JSON 中使用 OCI 媒體類型而不是 Docker 的媒體類型
unpack=true
:建立後解壓縮鏡像(與containerd一起使用)
dangling-name-prefix=
:使用prefix@
命名圖像,用於匿名圖像
name-canonical=true
: 新增額外的規範名稱name@
compression=
:為新建立和快取的圖層選擇壓縮類型,gzip 為預設值。 eargz 應與oci-mediatypes=true
一起使用。
compression-level=
:gzip、estargz (0-9) 和 zstd (0-22) 的壓縮級別
rewrite-timestamp=true
:將檔案時間戳記重寫為SOURCE_DATE_EPOCH
值。請參閱docs/build-repro.md
以了解如何指定SOURCE_DATE_EPOCH
值。
force-compression=true
:將compression
選項強制套用到所有圖層(包括已經存在的圖層)
store=true
:將結果影像儲存到工作人員(例如,containerd)映像儲存中,並確保映像在內容儲存中具有所有 blob(預設true
)。如果工作人員沒有影像儲存(例如 OCI 工作人員),則忽略。
annotation.
:將帶有對應key
和value
註解附加到已建置的圖像上
使用擴充語法, annotation-
、 annotation[
以及兩者與annotation-
組合annotation-
,允許準確配置附加註解的位置。
指定要附加到的對象,可以是manifest
(預設)、 manifest-descriptor
、 index
和index-descriptor
中的任何一個
指定要附加到哪些物件(預設為所有物件),並且與傳遞到platform
選項的金鑰相同,請參閱docs/multi-platform.md
。
有關更多詳細信息,請參閱docs/annotations.md
。
如果需要憑證, buildctl
將嘗試讀取 Docker 設定檔$DOCKER_CONFIG/config.json
。 $DOCKER_CONFIG
預設為~/.docker
。
本機客戶端會將檔案直接複製到客戶端。如果 BuildKit 用於建立容器映像以外的其他內容,這非常有用。
buildctl build ... --output type=local,dest=path/to/output-dir
要匯出特定文件,請使用具有臨時階段的多階段構建,並使用COPY --from
將所需文件複製到該階段。
……從頭開始作為 testresultCOPY --from=builder /usr/src/app/testresult.xml 。 …
buildctl build ... --opt target=testresult --output type=local,dest=path/to/output-dir
透過多平台構建,將在目標目錄中建立與每個目標平台匹配的子資料夾:
FROM busybox AS buildARG TARGETOSARG TARGETARCHRUN mkdir /out && echo foo > /out/hello-$TARGETOS-$TARGETARCHFROM scrapCOPY --from=build /out /
$ buildctl 構建 --前端dockerfile.v0 --opt 平台=linux/amd64,linux/arm64 --輸出類型=本地,目標=./bin/release $ 樹 ./bin 。 └── 釋放 ├── linux_amd64 │ └── 你好-linux-amd64 └── linux_arm64 └── 你好-linux-arm64
您可以設定platform-split=false
將所有平台的檔案合併到同一目錄中:
$ buildctl 構建 --前端dockerfile.v0 --opt 平台=linux/amd64,linux/arm64 --output type=local,dest=./bin/release,platform-split=false $ 樹 ./bin 。 └── 釋放 ├── 你好-linux-amd64 └── 你好-linux-arm64
Tar 匯出器與本機匯出器類似,但透過 tarball 傳輸檔案。
buildctl build ... --output type=tar,dest=out.tar buildctl build ... --output type=tar > out.tar
# 匯出的 tarball 也與 OCI specbuildctl build 相容 ... --output type=docker,name=myimage |碼頭工人負載
buildctl build ... --output type=oci,dest=path/to/output.tar buildctl build ... --output type=oci > output.tar
需要使用containerdworker
buildctl build ... --output type=image,name=docker.io/username/image ctr --namespace=buildkit 映像 ls
要更改containerd命名空間,您需要更改/etc/buildkit/buildkitd.toml
中的worker.containerd.namespace
。
顯示本機建置快取( /var/lib/buildkit
):
buildctl du -v
修剪本機建置快取:
建構修剪
請參閱./docs/buildkitd.toml.md
。
BuildKit 支援以下快取導出器:
inline
:將快取嵌入到鏡像中,並一起推送到註冊表
registry
: 分別推送鏡像和緩存
local
:匯出到本機目錄
gha
:匯出到 GitHub Actions 緩存
在大多數情況下,您希望使用inline
快取導出器。但請注意, inline
快取導出器僅支援min
快取模式。若要啟用max
快取模式,請使用registry
快取匯出器分別推送映像和快取。
inline
和registry
導出器都將快取儲存在註冊表中。對於匯入緩存, type=registry
就足夠了,因為不需要指定快取格式。
buildctl 建造... --輸出類型=映像,名稱=docker.io/使用者名稱/映像,push=true --匯出快取類型=內聯 --import-cache type=registry,ref=docker.io/使用者名稱/image
請注意,除非提供--import-cache type=registry,ref=...
否則不會導入內嵌快取。
內嵌快取將快取元資料嵌入到影像配置中。與沒有快取資訊的圖像相比,圖像中的圖層將保持不變。
Docker 整合的 BuildKit ( DOCKER_BUILDKIT=1 docker build
) 和docker buildx
需要指定--build-arg BUILDKIT_INLINE_CACHE=1
以啟用inline
快取匯出器。但是,獨立的buildctl
不需要--opt build-arg:BUILDKIT_INLINE_CACHE=1
並且 build-arg 會被忽略。
buildctl 建造... --輸出類型=映像,名稱=本機主機:5000 / myrepo:映像,推送= true --export-cache type=registry,ref=localhost:5000/myrepo:buildcache --import-cache type=registry,ref=localhost:5000/myrepo:buildcache
--export-cache
選項:
type=registry
mode=
:指定要匯出的快取層(預設值: min
)
min
:僅匯出結果影像的圖層
max
:匯出所有中間步驟的所有圖層
image-manifest=
:是否將快取清單匯出為 OCI 相容的圖像清單而不是清單清單/索引(預設值: false
,必須與oci-mediatypes=true
一起使用)
oci-mediatypes=
:是否在匯出的清單中使用 OCI 媒體類型(預設值: true
,自 BuildKit v0.8
起)
compression=
:為新建立和快取的圖層選擇壓縮類型,gzip 為預設值。 eargz 和 zstd 應與oci-mediatypes=true
一起使用
compression-level=
:選擇 gzip、estargz (0-9) 和 zstd (0-22) 的壓縮級別
force-compression=true
:強制將compression
選項套用至所有層
ignore-error=
:指定在快取匯出失敗時是否忽略錯誤(預設值: false
)
--import-cache
選項:
buildctl build ... --export-cache type=local,dest=path/to/output-dir buildctl build ... --import-cache type=local,src=path/to/input-dir
目錄佈局符合 OCI Image Spec v1.0。
--export-cache
選項:
type=local
mode=
:指定要匯出的快取層(預設值: min
)
min
:僅匯出結果影像的圖層
max
:匯出所有中間步驟的所有圖層
dest=
:快取導出器的目標目錄
tag=
:指定要寫入本機索引的映像的自訂標籤(預設: latest
)
image-manifest=
:是否將快取清單匯出為 OCI 相容的圖像清單而不是清單清單/索引(預設值: false
,必須與oci-mediatypes=true
一起使用)
oci-mediatypes=
:是否在匯出的清單中使用 OCI 媒體類型(預設true
,自 BuildKit v0.8
起)
compression=
:為新建立和快取的圖層選擇壓縮類型,gzip 為預設值。 eargz 和 zstd 應與oci-mediatypes=true
一起使用。
compression-level=
:gzip、estargz (0-9) 和 zstd (0-22) 的壓縮級別
force-compression=true
:強制將compression
選項套用至所有層
ignore-error=
:指定在快取匯出失敗時是否忽略錯誤(預設值: false
)
--import-cache
選項:
type=local
src=
:快取導入器的來源目錄
tag=
:指定要從本機索引讀取的映像的自訂標籤(預設: latest
)
digest=sha256:
:指定要匯入的清單清單的明確摘要
buildctl 建造... --輸出類型=映像,名稱=docker.io/使用者名稱/映像,push=true --匯出快取類型=gha --導入快取類型=gha
GitHub Actions 快取將快取元資料和圖層儲存到 GitHub 的快取服務。該快取目前的大小限制為 10GB,可在儲存庫中的不同快取之間共用。如果超過此限制,GitHub 將保存您的緩存,但會開始逐出緩存,直到總大小小於 10 GB。過於頻繁地回收快取可能會導致整體運行時間變慢。
與使用 actions/cache 類似,快取按分支劃分範圍,每個分支都可以使用預設分支和目標分支。
針對 GitHub Actions Cache 服務 API 進行驗證需要以下屬性:
url
: 快取伺服器 URL (預設$ACTIONS_CACHE_URL
)
token
:存取權杖(預設$ACTIONS_RUNTIME_TOKEN
)
這種類型的快取可以與 Docker Build Push Action 一起使用,其中url
和token
將自動設定。要在內聯run
步驟中使用從終端,您必須在工作流程中包含 mad-max/ghaction-github-runtime 以公開執行時間。
--export-cache
選項:
type=gha
mode=
:指定要匯出的快取層(預設值: min
)
min
:僅匯出結果影像的圖層
max
:匯出所有中間步驟的所有圖層
scope=
:快取物件屬於哪個範圍(預設buildkit
)
ignore-error=
:指定在快取匯出失敗時是否忽略錯誤(預設值: false
)
timeout=
:設定快取匯出的逾時時長(預設: 10m
)
--import-cache
選項:
type=gha
scope=
:快取物件屬於哪個範圍(預設buildkit
)
timeout=
:設定快取導入的逾時時長(預設: 10m
)
buildctl 建造... --輸出類型=映像,名稱=docker.io/使用者名稱/映像,push=true --export-cache type=s3,region=eu-west-1,bucket=my_bucket,name=my_image --匯入快取類型=s3,區域=eu-west-1,儲存桶=my_bucket,名稱=my_image
需要以下屬性:
bucket
:AWS S3 儲存桶(預設值: $AWS_BUCKET
)
region
: AWS 區域(預設值: $AWS_REGION
)
儲存地點:
blob: s3://
,預設值: s3://
清單: s3://
,預設值: s3://
S3配置:
blobs_prefix
:在 s3 上儲存/讀取 blob 的全域前綴(預設值: blobs/
)
manifests_prefix
:在 s3 上儲存/讀取清單的全域前綴(預設: manifests/
)
endpoint_url
:指定特定的 S3 端點(預設值:空)
use_path_style
:如果設定為true
,則將儲存桶名稱放在 URL 中而不是主機名稱中(預設值: false
)
AWS 驗證:
最簡單的方法是使用 IAM 實例設定檔。其他選項有:
使用 AWS Go SDK 支援的環境變數/設定檔的任何系統。此配置必須可用於 buildkit 守護進程,而不是客戶端。
使用以下屬性:
access_key_id
:存取金鑰 ID
secret_access_key
:秘密存取金鑰
session_token
:會話令牌
--export-cache
選項:
type=s3
mode=
:指定要匯出的快取層(預設值: min
)
min
:僅匯出結果影像的圖層
max
:匯出所有中間步驟的所有圖層
prefix=
:設定全域前綴以在 s3 上儲存/讀取檔案(預設值:空)
name=
:指定要使用的清單的名稱(預設buildkit
)
可以同時指定多個清單名稱,用 ; 分隔;
。標準用例是使用 git sha1 作為名稱,使用分支名稱作為重複名稱,並使用 2 個import-cache
命令載入兩者。
ignore-error=
:指定在快取匯出失敗時是否忽略錯誤(預設值: false
)
touch_refresh=24h
:每次touch_refresh
都會在 s3 上「觸摸」blob 文件,而不是在未更改時再次上傳,預設值為 24h。因此,可以在S3儲存桶上設定過期策略,自動清理無用檔案。清單檔案被系統地重寫,無需修改它們。
upload_parallelism=4
:此參數變更並行上傳到 s3 的層數。每個單獨的層都使用 AWS 開發工具包提供的上傳管理器透過 5 個執行緒進行上傳。
--import-cache
選項:
type=s3
prefix=
:設定全域前綴以在 s3 上儲存/讀取檔案(預設值:空)
blobs_prefix=
:設定全域前綴以在 s3 上儲存/讀取 blob(預設值: blobs/
)
manifests_prefix=
:設定全域前綴以在 s3 上儲存/讀取清單(預設值: manifests/
)
name=
:要使用的清單的名稱(預設buildkit
)
buildctl 建造... --輸出類型=映像,名稱=docker.io/使用者名稱/映像,push=true --export-cache type=azblob,account_url=https://myaccount.blob.core.windows.net,name=my_image --import-cache type=azblob,account_url=https://myaccount.blob.core.windows.net,name=my_image
需要以下屬性:
account_url
:Azure Blob 儲存帳戶 URL(預設值: $BUILDKIT_AZURE_STORAGE_ACCOUNT_URL
)
儲存地點:
blob:
,預設值:
清單:
,預設值:
Azure Blob 儲存體設定:
container
:Azure Blob 儲存容器名稱(預設值: buildkit-cache
或$BUILDKIT_AZURE_STORAGE_CONTAINER
如果設定)
blobs_prefix
:在 Azure Blob 儲存容器 (
) 上儲存/讀取 blob 的全域前綴(預設值: blobs/
)
manifests_prefix
:在 Azure Blob 儲存容器 (
) 上儲存/讀取 Blob 的全域前綴(預設值: manifests/
)
Azure Blob 儲存體驗證:
Azure Blob 儲存體驗證支援 2 個選項:
使用 Azure SDK for Go 支援的環境變數的任何系統。此配置必須可用於 buildkit 守護進程,而不是客戶端。
秘密存取金鑰,使用secret_access_key
屬性指定 Azure Blob 儲存帳戶的主要或輔助帳戶金鑰。 Azure Blob 儲存帳戶金鑰
筆記
如果帳戶名稱不是帳戶 URL 主機的一部分,也可以使用account_name
屬性(或$BUILDKIT_AZURE_STORAGE_ACCOUNT_NAME
)指定帳戶名稱。
--export-cache
選項:
type=azblob
mode=
:指定要匯出的快取層(預設值: min
)
min
:僅匯出結果影像的圖層
max
:匯出所有中間步驟的所有圖層
prefix=
:設定全域前綴以在 Azure Blob 儲存容器 (
) 上儲存/讀取檔案(預設值:空)
name=
:指定要使用的清單的名稱(預設值: buildkit
)
可以同時指定多個清單名稱,用 ; 分隔;
。標準用例是使用 git sha1 作為名稱,使用分支名稱作為重複名稱,並使用 2 個import-cache
命令載入兩者。
ignore-error=
:指定在快取匯出失敗時是否忽略錯誤(預設值: false
)
--import-cache
選項:
type=azblob
prefix=
:設定全域前綴以在 Azure Blob 儲存容器 (
) 上儲存/讀取檔案(預設值:空)
blobs_prefix=
:設定全域前綴以在 Azure Blob 儲存容器 (
) 上儲存/讀取 blob(預設值: blobs/
)
manifests_prefix=
:設定全域前綴以在 Azure Blob 儲存容器 (
) 上儲存/讀取清單(預設值: manifests/
)
name=
:要使用的清單的名稱(預設值: buildkit
)
如果您有多個 BuildKit 守護程序實例,但不想使用註冊表在叢集中共用緩存,請考慮使用一致雜湊進行用戶端負載平衡。
請參閱./examples/kubernetes/consistenthash
。
若要輸出建構元資料(例如影像摘要),請傳遞--metadata-file
標誌。元資料將作為 JSON 物件寫入指定檔案。指定檔案的目錄必須已存在且可寫入。
buildctl build ... --元資料檔metadata.json
jq '.'元數據.json
{“containerimage.config.digest”:“sha256:2937f66a9722f7f4a2df583de2f8cb97fc9196059a410e7f00072fc918930e66”,"conconfigtainer{age.descript" 9722f7f4a2df583de2f8cb97fc9196059a410e7f00072fc918930e66", "org.opencontainers.image.created": " 2022-02-08T21:28:03Z"},"摘要":"sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883.3" ,"大小": 506 }, "containerimage.digest": "sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3"}
在基於 Systemd 的系統上,您可以透過 Systemd 套接字啟動與守護程式通信,使用buildkitd --addr fd://
。您可以在./examples/systemd
中找到透過 BuildKit 和 Systemd 使用 Systemd 套接字啟動的範例。
buildkitd
守護程式可以偵聽 TCP 套接字上的 gRPC API。
強烈建議為守護程式和用戶端 (mTLS) 建立 TLS 憑證。在沒有 mTLS 的情況下啟用 TCP 是危險的,因為執行器容器(也稱為 Dockerfile RUN
容器)也可以呼叫 BuildKit API。
建構套件 --位址 tcp://0.0.0.0:1234 --tlscacert /path/to/ca.pem --tlscert /path/to/cert.pem --tlskey /path/to/key.pem
建置控制 --addr tcp://example.com:1234 --tlscacert /path/to/ca.pem --tlscert /path/to/clientcert.pem --tlskey /path/to/clientkey.pem 建造 ...
可以針對隨機負載平衡的buildkitd
守護程式呼叫buildctl build
。
另請參閱客戶端負載平衡的一致性雜湊。
也可以透過在 Docker 容器內執行buildkitd
守護程式並遠端存取它來使用 BuildKit。
我們提供容器鏡像作為moby/buildkit
:
moby/buildkit:latest
:從最新的常規版本構建
moby/buildkit:rootless
:與latest
相同,但以非特權使用者身分執行,請參閱docs/rootless.md
moby/buildkit:master
:從 master 分支構建
moby/buildkit:master-rootless
:與 master 相同,但以非特權使用者身分執行,請參閱docs/rootless.md
要在容器中運行守護程式:
docker run -d --name buildkitd --privileged moby/buildkit:latestexport BUILDKIT_HOST=docker-container://buildkitd buildctl建置--幫助
要連接到 Podman 容器中執行的 BuildKit 守護程序,請使用podman-container://
而不是docker-container://
。
podman run -d --name buildkitd --privileged moby/buildkit:latest buildctl --addr=podman-container://buildkitd build --frontend dockerfile.v0 --local context=. --本機 dockerfile=. --輸出類型=oci | podman 加載 foo
不需要sudo
。
要連接到在 Nerdctl 容器中運行的 BuildKit 守護進程,請使用nerdctl-container://
而不是docker-container://
。
nerdctl run -d --name buildkitd --privileged moby/buildkit:latest buildctl --addr=nerdctl-container://buildkitd build --frontend dockerfile.v0 --local context=. --本機 dockerfile=. --輸出類型=oci |書呆子負載
不需要sudo
。
有關 Kubernetes 部署,請參閱examples/kubernetes
。
若要在單一容器中執行客戶端和臨時守護程式(“無守護程式模式”):
碼頭運行 -它 --rm - 特權 -v /路徑/到/目錄:/tmp/工作 --entrypoint buildctl-daemonless.sh 莫比/buildkit:大師 建造 --前端dockerfile.v0 --本地上下文=/tmp/工作 --本機 dockerfile=/tmp/work
或者
碼頭運行 -它 --rm --security-opt seccomp=無限制 --security-opt apparmor=無限制 -e BUILDKITD_FLAGS=--oci-worker-no-process-sandbox -v /路徑/到/目錄:/tmp/工作 --entrypoint buildctl-daemonless.sh moby/buildkit:master-rootless 建造 - 前端 dockerfile.v0 --本地上下文=/tmp/工作 --本機 dockerfile=/tmp/work
BuildKit 支援 buildkitd gRPC API 和 buildctl 指令的 OpenTelemetry。若要擷取 Jaeger 的跟踪,請將JAEGER_TRACE
環境變數設定為收集位址。
。 :// /127.0.0.1:16686/
在 Windows 上,如果您在容器
jaeger-all-in-one.exe
之外執行 Jaeger,請設定環境變數setx -m JAEGER_TRACE "0.0.0.0:6831"
,在新終端機中重新啟動buildkitd
,追蹤資訊將顯示為自動收集。
請參閱docs/rootless.md
。
請參閱docs/multi-platform.md
。
buildctl
buildctl
支援修改用於輸出資訊到終端的顏色。您可以將環境變數BUILDKIT_COLORS
設定為run=green:warning=yellow:error=red:cancel=255,165,0
之類的值來設定您想要使用的顏色。依照 no-color.org 的建議,將NO_COLOR
設定為任何值都會停用任何彩色輸出。
解析錯誤將被報告但被忽略。這將導致在需要時使用預設顏色值。
預定義顏色清單。
您可以透過將BUILDKIT_TTY_LOG_LINES
設為數字(預設值:6)來變更 tty 模式下活動步驟可見的日誌行數。
想為 BuildKit 做出貢獻嗎?驚人的!您可以在 CONTRIBUTING.md 中找到有關對該專案做出貢獻的信息