docker打包多架构镜像(manifest)
可以实现docker多架构打包,这样不同的系统架构,也可以使用同一个镜像,就不用再给镜像每个镜像的版本后面拼接**-arm64。在执行pull操作时,客户端会自动将当前的架构发送给服务端,服务端则会响应对应架构的镜像。通过将多个镜像的清单文件,汇总成一个清单列表,为每个清单文件标注上对应架构。由于没有arm架构的机器,这里直接用tag,创建两个不同的镜像,模拟演示。本质上,外部看到的这个镜像,其实
在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
}
更多推荐
所有评论(0)