Docker版本要求
- 19.03
查看buildx版本
- buildx version
设置环境变量(或从源码构建)
buildx 命令属于实验特性,因此首先需要开启该特性。
查看 Docker 版本返回的内容中,如果出现Experimental: true字样就代表已经开启该特性了。下面的这一步骤就可以省略。
方式一
$ export DOCKER_CLI_EXPERIMENTAL=enabled
方式二
编辑 ~/.docker/config.json 文件,新增如下内容(以下的演示适用于事先不存在 .docker 目录的情况下)
开启binfmt_misc
开启 binfmt_misc 来运行非本地架构 Docker 镜像
如果读者使用的是 Mac 或者 Windows 版本 Docker 桌面版,可以跳过这个步骤,因为 binfmt_misc 默认开启。
如果使用是 Linux 系统,需要设置 binfmt_misc。在大部分发行版中,这个操作非常简单,但是现在可以通过运行一个特权 Docker 容器来更方便的设置:
$ docker run--rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d
通过检查 QEMU 处理程序来验证 binfmt_misc 设置是否正确:
然后,验证下指定架构处理程序已经启用,例如:
切换至多架构构建器
默认情况下,Docker 会使用旧的构建器,不支持多架构构建。
为了创建一个新的支持多架构的构建器,需要运行:
创建新的支持多架构的构建器:
$ docker buildx create --use --name mybuilder
验证新的构建器已经生效
$ docker buildx ls
搞定。现在 Docker 会使用新的构建器,支持构建多架构镜像。
构建多架构镜像
1. 创建一个简单的 Go 应用程序,输出当前运行环境的架构信息(略)
2. 创建一个Dockerfile来容器化这个应用
这是一个多阶段 Dockerfile,通过 Go 编译器构建我们的应用程序,然后将构建出来的二进制程序使用 Alpine Linux 镜像创建成最小镜像。
现在,让我们使用 buildx 来构建一个支持 arm、arm64 和 amd64 架构的多架构镜像,并一次性推送到 Docker Hub:
$ docker buildx build -t blackdob/mybuilder1 --platform=linux/arm,linux/arm64,linux/amd64 -f ./build/Dockerfile . --push
--platform 参数将通知 buildx 构建 amd64 和 aarch64 架构的镜像
--push 生成一份多架构的 manifest 并直接将所有镜像推送至 Docker Hub
A&Q
1. 在push之前注意要 docker login
网友评论