前言
原本多架构其实我还遇到的不算多,但自从苹果的 M1 出来之后 arm64 版本支持就变成了一个常态,所以会常遇到需要多架构镜像都构建的情况。以前的 docker 版本需要你去编写 manifest
很麻烦,而今天就说说如何使用 docker buildx
来同时构建多架构的镜像,其实现在已经非常方便了。
目标:构建出 amd64 和 arm64 的 docker 镜像
创建 builder
默认你在 docker build
的时候直接指定 --platform linux/arm64,linux/amd64
就会报错,告诉你需要使用 docker buildx
而前提是你需要有一个 builder
$ docker buildx create --name mybuilder --driver docker-container
$ docker buildx use mybuilder
Linux 非 arm 下可能需要你先安装 https://github.com/tonistiigi/binfmt#installing-emulators 以支持 arm 平台的打包
构建
其实到这里已经非常简单的,就和原来的构建命令差不多,只是需要指定对应构建的架构即可
代码语言:javascript复制docker buildx build --platform linux/amd64,linux/arm64 -t linkinstar/app:latest .
当然,如何想要将构建完成的镜像直接 push 到镜像仓库,也可以追加参数 --push
docker buildx build --platform linux/amd64,linux/arm64 -t linkinstar/app:latest . --push
可能存在的问题
由于国内网络环境的问题,可以尝试使用 https://github.com/docker-practice/buildx 实际中我使用时发现和官方的还是有区别,所以竟可能还是用官方的 builder,实在不行可以考虑更换
代码语言:javascript复制# 添加了镜像设置,建议在国内环境使用
# 网易云镜像 二选一
$ docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master
# 百度云镜像 二选一
$ docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master-baidu
$ docker buildx use mybuilder-cn