Docker 容器驅動程式

Docker 容器驅動程式允許在專用的 Docker 容器中建立受管理且可自定義的 BuildKit 環境。

與預設的 Docker 驅動程式相比,使用 Docker 容器驅動程式有幾個優點。例如:

概要

執行以下指令以建立一個名為 container 的新建構器,並使用 Docker 容器驅動程式:

$ docker buildx create \
  --name container \
  --driver=docker-container \
  --driver-opt=[key=value,...]
container

下表說明了您可以傳遞給 --driver-opt 的可用驅動程式特定選項

參數類型預設值描述
imageString設定用於容器的 BuildKit 映像檔。
記憶體 (memory)String設定容器可使用的記憶體量。
記憶體交換空間 (memory-swap)String設定容器的記憶體交換空間限制。
CPU 配額 (cpu-quota)String對容器強制執行 CPU CFS 配額。
CPU 週期 (cpu-period)String設定容器的 CPU CFS 排程器週期。
CPU 份額 (cpu-shares)String配置容器的 CPU 份額(相對權重)。
CPU 核心集合 (cpuset-cpus)String限制容器可使用的 CPU 核心集。
CPU 記憶體節點 (cpuset-mems)String限制容器可使用的 CPU 記憶體節點集。
預設載入布林值false自動將映像檔載入到 Docker Engine 映像檔儲存庫。
network(網路)String設定容器的網路模式。
cgroup 父層 (cgroup-parent)String/docker/buildx如果 Docker 使用 "cgroupfs" 驅動程式,則設定容器的 cgroup 父層。
重啟策略 (restart-policy)Stringunless-stopped設定容器的重啟策略
環境變數 env.<key>String將容器中環境變數 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 儲存卷 (volume) 中。

若要在使用 docker buildx rmdocker 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 旗標來指定您要建構的架構。

例如,若要建構適用於 amd64arm64 的 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 參考文件

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.