一、官网参考地址

https://docs.docker.com/build/buildkit/configure/
https://docs.docker.com/reference/cli/docker/buildx/

二、buildx 交叉编译

Buildx 是基于 BuildKit 的 Docker 扩展插件项目。Buildx 默认使用 BuildKit 引擎进行构建,本质上调用了 Buildkit 的 API,镜像构建过程是在 Buildkit 的环境中进行的。

Buildx 限制和应对:

Docker 版本限制,使用 buildx 作为 docker CLI 插件需要使用 Docker 19.03 或更高的版本才能支持。旧版本的 Docker 也可以单独安装调用二进制文件作为插件,可以支持部分功能。对于 Docker 版本大于 19.03 的版本,可以直接调用 buildx 二进制来访问 docker buildx 子命令。

Linux 内核版本限制,要求 Linux kernel >= 4.8,因为自该 Linux 内核版本 binfmt_misc 才支持 fix-binary (F) flag。fix_binary 标志允许内核在容器或 chroot 内使用 binfmt_misc 注册的二进制格式处理程序,即使该处理程序二进制文件不是该容器或 chroot 内可见的文件系统的一部分。即可以支持编译打包不同架构平台的镜像。

三、启用docker buildx

添加配置

vim /etc/docker/daemon.json
{
    "experimental": true
}
  • 自签名的证书加载,两种方案。
    • 本地有证书文件,buildkit 容器启动以后自动加载。
    • 把自签名证书文件打到镜像里面,然后通过 buildkitd.toml 指定证书文件位置。
root@ip-172-20-60-86:~# ls -l /etc/docker/certs.d/cloud.test.com/ca.crt /usr/local/share/ca-certificates/cloud.test.com.crt /etc/buildkit/certs.d/cloud.test.com/ca.crt
-rw------- 1 root root 2045 Sep  2 15:18 /etc/buildkit/certs.d/cloud.test.com/ca.crt             # buildkit 官方要求的路径
-rw------- 1 root root 2045 Apr 16 13:49 /etc/docker/certs.d/cloud.test.com/ca.crt               # docker 使用的,需要重启docker加载证书
-rw------- 1 root root 2045 Sep  2 15:16 /usr/local/share/ca-certificates/cloud.test.com.crt     # OS系统使用的证书路径
root@ip-172-20-60-86:~#

对应的证书文件,要在指定的位置。


# docker buildx create \
  --name builder \
  --buildkitd-config=/etc/buildkitd.toml \
  --driver docker-container \
  --use \
  --bootstrap \
  --driver-opt image=cloud.test.com/moby/buildkit:buildx-stable-1 \
  --platform linux/amd64,linux/arm64

# docker buildx create \
  --name=builder \
  --driver=docker-container \
  --use \
  --bootstrap \
  --driver-opt "env.BUILDKIT_STEP_LOG_MAX_SIZE=10485760" \
  --driver-opt image=cloud.test.com/moby/buildkit:buildx-stable-1 \
  --platform linux/amd64,linux/arm64

buildkitd.toml

四、参考命令

开启内核支持特性,(可选)

docker run --privileged --rm tonistiigi/binfmt --install all

列出所有可用的构建器

docker buildx ls

查看构建器详情

docker buildx inspect builder-20250211

启动 builder-20250211 构建器

docker buildx inspect --bootstrap --builder builder-20250211

设置默认构建器

docker buildx use --default builder-20250211

构建 debug-tools 镜像

docker buildx build \
  --builder builder-20250211 \
  --platform linux/amd64,linux/arm64 \
  -t harbor.ctfo.com/znlk-edge/debug-network-tools:2024-03-19 \
  --push \
  -f tools/debug-tools/debug-ecu-tools/Dockerfile .

查看镜像 inspect

docker manifest inspect -v harbor.ctfo.com/znlk-edge/debug-network-tools:2024-03-19

创建 builder 实例

docker buildx create \
  --name=jenkins \
  --driver docker-container \
  --platform linux/amd64,linux/386,linux/riscv64,linux/arm/v7,linux/arm/v6,linux/s390x,linux/ppc64le,linux/arm64

docker buildx create \
  --name=jenkins \
  --driver=docker-container \
  --use \
  --bootstrap \
  --driver-opt \
  image=cloud.test.com/moby/buildkit:buildx-stable-1 \
  --platform linux/amd64,linux/arm64

查看构建器详情

docker buildx inspect jenkins

启动 mybuilder 构建器

docker buildx inspect --bootstrap --builder jenkins

设置默认构建器

docker buildx use --default jenkins