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

快取持續性

docker-container 驅動程式支援快取持續性,因為它將所有 BuildKit 狀態和相關快取儲存在專用 Docker 磁碟區中。

即使使用 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

**注意**

使用 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 參考文件