前言
Docker 镜像需要运行在不同架构的操作系统上,为此同一个版本的镜像需要打上不同架构的Tag,为了方便管理及下载 ,可以使用docker manifest来处理。
类似于docker hub中的管理方式。
一、manifest 简介
docker image inspect <image ID>
查看镜像的信息,CPU架构版本,安装程序,依赖库,网络等信息。
用来维护docker hub社区中的镜像信息。
二、创建 manifest
下面均以 alpine:3.6 镜像为例。
1. 创建不同版本镜像的tag
创建不同tag的私仓镜像,并上传至私仓。(创建manifest需要先将镜上传至私仓)
# Tag arm64 私仓镜像
docker tag alpine:3.6-arm64 <private_hub>/alpine:3.6-arm64
docker push <private_hub>/alpine:3.6-arm64
#Tag amd 私仓镜像
docker tag alpine:3.6-amd64 <private_hub>/alpine:3.6-amd64
docker push <private_hub>/alpine:3.6-amd64
2. 创建manifest
docker manifest create <private_hub>/alpine:3.6 <private_hub>/alpine:3.6-arm64 <private_hub>/alpine:3.6-amd64
3. 申明每个tag的系统及architecture
# 申明 arm64
docker manifest annotate <private_hub>/alpine:3.6 <private_hub>/alpine:3.6-arm64 --os linux --arch arm64
# 申明 amd64
docker manifest annotate <private_hub>/alpine:3.6 <private_hub>/alpine:3.6-amd64 --os linux --arch amd64
4. 上传manifest
docker manifest push <private_hub>/alpine:3.6
此时仓库中 <private_hub>/alpine:3.6
已包含了两个镜像的Tag。 通过docker pull 直接下载镜像,docker会根据系统的architecture选择对应的镜像下载。
三、指定platform architecture下载镜像
docker pull <image_tag>
拉去镜像时,可通过参数 --platform
指定具体的 arch 下载镜像。使用 --paltform
需要打开相关配置。
1. 修改配置文件
路径: /etc/docker/daemon.json
vi /etc/docer/daemon.json
{
"experimental": true
}
2. 重启docker服务
systemctl restart docker
3. 下载指定架构的镜像
# 下载指定architecture镜像
docker pull --platform arm64 <private_hub>/alpine:3.6
# 查看镜像信息
docker inspect <private_hub>/alpine:3.6 |grep -i arch