docker 基于 buildx 构建跨平台镜像
在 Docker 19.03+ 版本中可以使用 docker buildx build
命令使用 BuildKit 构建镜像。该命令支持 --platform
参数可以同时构建支持多种系统架构的 Docker 镜像,大大简化了构建步骤。
安装 buildx
判断当前 docker 环境中是否已有 buildx
1 | docker --help | grep buildx || echo "Buildx not installed" |
如果未安装则通过 buildx releases 页面下载当前操作系统对应的版本,并存放到 $HOME/.docker/cli-plugins
下
示例:
1 | mkdir -p $HOME/.docker/cli-plugins |
注意:Linux/MacOS 需要为二进制文件赋予可执行权限
操作系统 | buildx 二进制文件名 | 存放目录 |
---|---|---|
Linux | docker-buildx | $HOME/.docker/cli-plugins |
MacOS | docker-buildx | $HOME/.docker/cli-plugins |
Windows | docker-buildx.exe | %USERPROFILE%.docker\cli-plugins |
导入 buildx 后,再次通过 docker --help
查看是否已有 buildx
1 | docker --help | grep buildx || echo "Buildx not installed" |
构建多平台镜像
为了让在主机操作系统上注册的 QEMU 二进制文件
binfmt_misc
在容器中透明地工作,它们必须静态编译并使用fix_binary
注册。这需要kernel >= 4.8
和binfmt-support >= 2.1.7
。您可以通过检查文件/proc/sys/fs/binfmt_misc/qemu-*
来检查是否正确注册。虽然 Docker Desktop 为其他平台预配置了binfmt_misc
支持,但对于其他安装,它可能需要使用Tonistigi/binfmt
镜像进行安装。
1 | docker run --privileged --rm tonistiigi/binfmt --install all |
创建如下 dockerfile
文件
1 | FROM alpine |
使用如下命令通过 buildx
构建并推送至仓库
--push
参数表示将构建好的镜像推送到 Docker 仓库
1 | docker buildx build --platform linux/amd64,linux/arm64 -t myusername/hello . --push |
参考文章:
- 本文标题:docker 基于 buildx 构建跨平台镜像
- 本文作者:akiya
- 本文链接:https://little-star.love/posts/7defa9d3/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!