Docker 容器驅動程式
Docker 容器驅動程式允許在專用的 Docker 容器中建立一個託管的、可自定義的 BuildKit 環境。
與預設的 Docker 驅動程式相比,使用 Docker 容器驅動程式有幾個優勢。例如:
概要
執行以下命令建立名為 container
的新構建器,該構建器使用 Docker 容器驅動程式
$ docker buildx create \
--name container \
--driver=docker-container \
--driver-opt=[key=value,...]
container
下表描述了可以傳遞給 --driver-opt
的可用驅動程式特定選項
引數 | 型別 | 預設值 | 描述 |
---|---|---|---|
image | 字串 | 設定用於容器的 BuildKit 映象。 | |
memory | 字串 | 設定容器可以使用的記憶體量。 | |
memory-swap | 字串 | 設定容器的記憶體交換限制。 | |
cpu-quota | 字串 | 對容器施加 CPU CFS 配額。 | |
cpu-period | 字串 | 設定容器的 CPU CFS 排程器週期。 | |
cpu-shares | 字串 | 配置容器的 CPU 共享 (相對權重)。 | |
cpuset-cpus | 字串 | 限制容器可以使用的 CPU 核心集。 | |
cpuset-mems | 字串 | 限制容器可以使用的 CPU 記憶體節點集。 | |
default-load | 布林值 | false | 自動將映象載入到 Docker Engine 映象儲存中。 |
network | 字串 | 設定容器的網路模式。 | |
cgroup-parent | 字串 | /docker/buildx | 如果 Docker 使用 "cgroupfs" 驅動程式,設定容器的 cgroup 父級。 |
restart-policy | 字串 | unless-stopped | 設定容器的重啟策略。 |
env.<key> | 字串 | 在容器中將環境變數 key 設定為指定值 value 。 |
在配置容器的資源限制之前,請閱讀關於配置容器執行時資源約束的內容。
用法
執行構建時,Buildx 會拉取指定的 image
(預設為 moby/buildkit
)。容器啟動後,Buildx 會將構建提交到容器化的構建伺服器。
$ docker buildx build -t <image> --builder=container .
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
#1 [internal] booting buildkit
#1 pulling image moby/buildkit:buildx-stable-1
#1 pulling image moby/buildkit:buildx-stable-1 1.9s done
#1 creating container buildx_buildkit_container0
#1 creating container buildx_buildkit_container0 0.5s done
#1 DONE 2.4s
...
快取永續性
docker-container
驅動程式支援快取永續性,因為它將所有 BuildKit 狀態和相關快取儲存到一個專用的 Docker 卷中。
為了即使在使用 docker buildx rm
和 docker buildx create
重新建立驅動程式後仍能持久化 docker-container
驅動程式的快取,可以使用 --keep-state
標誌銷燬構建器
例如,建立一個名為 container
的構建器,然後在持久化狀態的同時將其移除
# setup a builder
$ docker buildx create --name=container --driver=docker-container --use --bootstrap
container
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
container * docker-container
container0 desktop-linux running v0.10.5 linux/amd64
$ docker volume ls
DRIVER VOLUME NAME
local buildx_buildkit_container0_state
# remove the builder while persisting state
$ docker buildx rm --keep-state container
$ docker volume ls
DRIVER VOLUME NAME
local buildx_buildkit_container0_state
# the newly created driver with the same name will have all the state of the previous one!
$ docker buildx create --name=container --driver=docker-container --use --bootstrap
container
QEMU
docker-container
驅動程式支援使用 QEMU(使用者模式)來構建非原生平臺。使用 --platform
標誌指定要構建的架構。
例如,構建用於 amd64
和 arm64
的 Linux 映象
$ docker buildx build \
--builder=container \
--platform=linux/amd64,linux/arm64 \
-t <registry>/<image> \
--push .
注意
使用 QEMU 進行模擬可能比原生構建慢得多,特別是對於編譯、壓縮或解壓等計算密集型任務。
自定義網路
你可以自定義構建器容器使用的網路。這在需要為構建使用特定網路時非常有用。
例如,讓我們建立一個網路,命名為 foonet
$ docker network create foonet
現在建立一個 docker-container
構建器,它將使用這個網路
$ docker buildx create --use \
--name mybuilder \
--driver docker-container \
--driver-opt "network=foonet"
啟動並檢查 mybuilder
$ docker buildx inspect --bootstrap
檢查構建器容器,檢視正在使用哪個網路
$ docker inspect buildx_buildkit_mybuilder0 --format={{.NetworkSettings.Networks}}
map[foonet:0xc00018c0c0]
延伸閱讀
有關 Docker 容器驅動程式的更多資訊,請參閱buildx 參考。