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-container
驱动程序的缓存,即使在重新创建
驱动程序使用docker buildx rm
和docker buildx create
中,您可以销毁
builder 使用--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
driver 支持使用 QEMU(用户态)构建非原生平台。使用--platform
标志以指定
要为其构建的体系结构。
例如,要为amd64
和arm64
:
$ 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"
Boot 和检查mybuilder
:
$ docker buildx inspect --bootstrap
检查 builder 容器并查看正在使用的网络:
$ docker inspect buildx_buildkit_mybuilder0 --format={{.NetworkSettings.Networks}}
map[foonet:0xc00018c0c0]
延伸阅读
有关 Docker 容器驱动程序的更多信息,请参阅 buildx 参考。