目录
[TOC]
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-amd64
和yourname/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