# 即使是不成熟的尝试,也胜于胎死腹中的策略。
我们利用镜像创建一个容器,该镜像必须与Docker宿主机系统架构一致,与Linux x86_64架构的系统只能使用Linux x86_64的镜像创建容器。
实际场景:
当我们需要部署一个docker镜像到不同架构的电脑上时候,需要不同架构版本的镜像,每次pull对应架构的镜像,这样太麻烦。
解决办法:
manifest则能够解决分别pull不同架构名字的镜像。
Docker引擎会首选查找镜像是否有manifest列表,如果有的话Docker引擎会按照Docker运行环境查找出对应架构docker镜像。
# 查看这个manifest列表结构
docker manifest inspect golang:alpine
# 制作不同架构的docker images
docker build -t jiaxiaofeng/x8664-server
docker build -t jiaxiaofeng/arm64v8-server
# 分别push到docker hub
docker login
docker push jiaxiaofeng/x8664-server
docker push jiaxiaofeng/arm64v8-server
# 查看docker hub
# 创建 manifest列表
docker manifest create jiaxiaofeng/server \
> jiaxiaofeng/x8664-server \
> jiaxiaofeng/arm64v8-server
输出:
Created manifest list docker.io/jiaxiaofeng/server:latest
# 设置manifest列表
docker manifest annotate jiaxiaofeng/server jiaxiaofeng/x8664-server \
> --os linux --arch x86_64
输出:
manifest entry for image has unsupported os/arch combination: linux/x86_64
docker manifest annotate jiaxiaofeng/server \
> jiaxiaofeng/arm64v8-server \
> --os linux --arch arm64 --variant v8
# 查看manifest列表
docker manifest inspect jiaxiaofeng/server
输出:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 946,
"digest": "sha256:25e362b21e75f6eac14350dbdfc6bac47ab23f255754ef7fada726ba83b4b58c",
"platform": {
"architecture": "arm64",
"os": "linux",
"variant": "v8"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 946,
"digest": "sha256:635232175077d0771998091ce7397a5de8ef92a9ca2624b8011b1edaea3c635f",
"platform": {
"architecture": "amd64",
"os": "linux"
}
}
]
}
# push manifest到docker hub
docker manifest push jiaxiaofeng/server
输出:
Pushed ref docker.io/jiaxiaofeng/server@sha256:25e362b21e75f6eac14350dbdfc6bac47ab23f255754ef7fada726ba83b4b58c with digest: sha256:25e362b21e75f6eac14350dbdfc6bac47ab23f255754ef7fada726ba83b4b58c
Pushed ref docker.io/jiaxiaofeng/server@sha256:635232175077d0771998091ce7397a5de8ef92a9ca2624b8011b1edaea3c635f with digest: sha256:635232175077d0771998091ce7397a5de8ef92a9ca2624b8011b1edaea3c635f
sha256:7a2f8ac1eb53752a79998053552b80ac70bf374696931cdb6f7ad48b7c69dc94
查看OS/ARCH可以看到两个版本的server,一个是x86架构的,一个是arm架构的。
# 下载镜像测试
# 在不同架构分别执行
docker run -it --rm jiaxiaofeng/server
转载请注明:XAMPP中文组官网 » docker镜像跨平台使用