对于有多个系统架构镜像部署的需求,需要打包多架构的镜像,实现一个镜像名多个架构镜像并能根据架构自动获取对应架构的镜像。以下以arm、x86双架构镜像举例:
方式1. docker manifest
(1) 打包好arm和x86的单独镜像并推送到仓库,分别为 xxx:base_image_arm 和 xxx:base_image_x86 (xxx为仓库名)
(2) 创建镜像manifest文件
docker manifest create --amend --insecure xxx:base_image xxx:base_image_arm xxx:base_image_amd
(3) 为manifest文件添加架构信息
docker manifest annotate xxx:base_image xxx:base_image_arm --arch arm64
docker manifest annotate xxx:base_image xxx:base_image_amd --arch amd64
(4) 推送镜像
docker manifest push --insecure xxx:base_image
(5) 拉取镜像
docker pull xxx:base_image
在不同架构的机器上拉取镜像会获得不同的镜像
方式2. docker buildx
(1) 打包镜像
docker buildx build -t xxx:base_image --platform=linux/arm64,linux/amd64 . --push
docker buildx 可以实现在一台机器上打包多个架构的镜像,方便简单。但是打包非本机器架构的镜像时docker会构造虚拟机打包,所以可能打包很慢
(2) 拉取镜像
docker pull xxx:base_image