前言:,目前arm系统越来越常见,对镜像的多架构需求也越来越大。对于同一个镜像,最简单的办法就是在amd64或arm机器上build后通过不同的tag进行区分,比如 nginx:v1-amd64 、 nginx:v1-arm64 ,但这种方式比较丑陋,而且没有对应架构的机器用来构建怎么办?,目前最新的办法就是使用buildx来进行构建,不过这个特性目前默认是没启用的,需要在docker的配置文件中添加 "experimental": true 后重启docker服务生效。,首先执行下面的命令让amd64的机器也可以构建arm的镜像:,然后创建一个新的build实例:,这样准备工作就全都做好了。,接下来以一个kubebuilder命令创建的operator项目默认的Dockerfile为例:,修改点有2个:,这些TARGET开头的变量可以在参考链接2里看到全部含义。,接下来使用这个文件进行构建:,注意这里的 buildx 、 –platform 参数后面跟随需要构建的版本、以及 –push ,buildx构建的多架构镜像要么使用这个参数push到镜像仓库,要么使用 –load 加载到本地,不可省略。,构建完成后就会生成相应的多架构镜像了,可以使用 docker manifest inspect 来进行验证,比如:,可以看出确实是生成了多个架构的镜像,使用时直接在不同架构的机器上pull就会自动下载对应的架构镜像了。或者也可以使用 docker pull –platform arm64|amd64 xxxxx 来指定拉取镜像的架构。,对于某些没有办法使用buildx的场景,我们可以手动build不同架构的镜像,然后再手动创建manifest,比如:,重点是最后3行,push manifest后使用就和第一种方法一样了。,另外如果想进行多架构构建有几个注意点:,其他 查看镜像仓库里都有哪些镜像:,查看镜像有哪些tag: