目录

[TOC]


png


1.首先在不同架构的平台构建好镜像

amd架构:

docker build -t yourname/yourimage:latest-amd64 -f Dockerfile.amd64 .

arm架构:

docker build -t yourname/yourimage:latest-arm64 -f Dockerfile.arm64 .

2.分别推送到dockerhub

推送以前首先要docker login

amd架构:

docker push yourname/yourimage:latest-amd64

arm架构:

docker push yourname/yourimage:latest-arm64

3.创建manifest

在任意机器上都可以,不用把镜像pull到本地

docker manifest create yourname/yourimage:latest yourname/yourimage:latest-amd64 yourname/yourimage:latest-arm64
若不小心输入错误了,可以使用下面的命令删除
docker manifest rm yourname/yourimage:latest 

4.检查manifest

docker manifest inspect yourname/yourimage:latest 

可以看到类似下面的返回:

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2413,
         "digest": "sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2413,
         "digest": "sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
         "platform": {
            "architecture": "arm64",
            "os": "linux",
            "variant": "v8"
         }
      }
   ]
}

检查其中的architecture和镜像是否正确对应,如果不正确的话可以根据4.1手动修改注释,一般都是正确的,可以直接跳过4.1修改注释

4.1 给 manifest 添加注释

docker manifest annotate yourname/yourimage:latest yourname/yourimage:latest-amd64 --os linux --arch amd64
docker manifest annotate yourname/yourimage:latest yourname/yourimage:latest-arm64 --os linux --arch arm64

5.推送manifest

docker manifest push yourname/yourimage:latest

6.删除docker hub中多余的镜像

登录https://hub.docker.com/ ,删除多余的镜像yourname/yourimage:latest-amd64yourname/yourimage:latest-arm64

想用api也可,但没必要
curl -X DELETE -H "Authorization: JWT <your_token>" https://hub.docker.com/v2/repositories/<your_username>/<your_image_name>/

7.在任意平台上拉取镜像

拉取镜像的时候会自动识别平台,并pull合适的镜像

docker pull yourname/yourimage:latest
Last modification:May 21, 2023
V50%看看实力