docker打包多架构镜像(manifest)

在docker仓库上,经常能看到这样的镜像

在这里插入图片描述

在一个”镜像“中,包含了三个架构的镜像

本质上,外部看到的这个镜像,其实不算是一个镜像,应该称它为镜像清单列表(manifest list)

manifest是一个文件,其中包含了镜像的基本信息,例如架构,大小等。

通过这个文件,可以找到对应具体的镜像

对于docker客户端而言,可以将这个文件当成镜像来使用,例如docker pull,docker run

通过将多个镜像的清单文件,汇总成一个清单列表,为每个清单文件标注上对应架构

可以实现docker多架构打包,这样不同的系统架构,也可以使用同一个镜像,就不用再给镜像每个镜像的版本后面拼接 -arm64 或者 -amd64

docker manifest有三个常用的命令create、annotate、push

注意:在使用manifest之前,必须保证目标镜像已经在仓库中存在,本地刚使用docker build或者docker tag新创建的镜像,比如要先push到仓库后才能使用docker manifest命令

重要:harbor1.X版本不支持多系统架构manifest,harbor2.X版本支持多系统架构manifest

下面演示打包多架构镜像

示例镜像:centos:7.6.1810

下面内容出现的 [harbor host] 需要替换为你自己的harbor仓库地址

由于没有arm架构的机器,这里直接用tag,创建两个不同的镜像,模拟演示

将两个不同架构的镜像,打包为一个镜像

centos:7.6.1810-arm、centos:7.6.1810-amd =》 centos:7.6.1810

docker tag centos:7.6.1810 [harbor host]/sample/centos:7.6.1810-arm
docker tag centos:7.6.1810 [harbor host]/sample/centos:7.6.1810-amd

docker push [harbor host]/sample/centos:7.6.1810-arm
docker push [harbor host]/sample/centos:7.6.1810-amd

创建清单,将两个镜像并入一个清单列表中

docker manifest create --insecure [harbor host]/sample/centos:7.6.1810 [harbor host]/sample/centos:7.6.1810-arm [harbor host]/sample/centos:7.6.1810-amd

在这里插入图片描述

再为每个镜像,标注架构

docker manifest annotate [harbor host]/sample/centos:7.6.1810 [harbor host]/sample/centos:7.6.1810-arm --os linux --arch arm64
docker manifest annotate [harbor host]/sample/centos:7.6.1810 [harbor host]/sample/centos:7.6.1810-amd --os linux --arch amd64

最后将清单推送到仓库,就可以进行pull操作了

 docker manifest push --insecure [harbor host]/sample/centos:7.6.1810

pull操作

docker pull [harbor host]/sample/centos:7.6.1810

在执行pull操作时,客户端会自动将当前的架构发送给服务端,服务端则会响应对应架构的镜像

docker daemon.json配置

{
  "insecure-registries": ["[harbor host]"],
  "experimental": true
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>