Skip to content

Docker 推送多架构镜像

在Docker Hub可以看到一个tag支持多种系统架构,这样在docker pull的时候,docker会自动判断选择对应的系统架构的镜像拉取。

image-20241030150538281

我们也打包推送这样的多架构镜像。

首先要准备好多个架构的镜像,例如arm64和amd64的。具体构建方式可以使用docker buildx或选择真机构建。

本文以fuming/scaffold-eth-2 Tags | Docker Hub为例。

第一步:推送镜像

在arm64系统上,将arm64镜像打个tag:docker tag fuming/scaffold-eth-2:0.0.1 fuming/scaffold-eth-2:0.0.1-arm64

在amd64系统上,将amd64镜像打个tag:docker tag fuming/scaffold-eth-2:0.0.1 fuming/scaffold-eth-2:0.0.1-amd64

分别推送至Docker Hub:

bash
docker push fuming/scaffold-eth-2:0.0.1-arm64
docker push fuming/scaffold-eth-2:0.0.1-amd64

第二步:推送manifest

在任意系统上,使用docker命令:

bash
docker manifest create fuming/scaffold-eth-2:0.0.1 fuming/scaffold-eth-2:0.0.1-arm64 fuming/scaffold-eth-2:0.0.1-amd64

分别标注镜像架构:

bash
docker manifest annotate fuming/scaffold-eth-2:0.0.1 fuming/scaffold-eth-2:0.0.1-arm64 --os linux --arch arm64
docker manifest annotate fuming/scaffold-eth-2:0.0.1 fuming/scaffold-eth-2:0.0.1-amd64 --os linux --arch amd64

推送:

bash
docker manifest push fuming/scaffold-eth-2:0.0.1

随后在Docker Hub页面可以看到已经完成:

image-20241030151700064

在Docker Hub页面手动将fuming/scaffold-eth-2:0.0.1-arm64fuming/scaffold-eth-2:0.0.1-amd64两个tag删除即可。

同样的方式,可以创建latest的tag,创建manifest并推送,就是fuming/scaffold-eth-2 Tags | Docker Hub所展示的效果:

image-20241030151638874