如何制作多架构镜像
操作场景
当您需要针对x86、ARM架构分别构建镜像并设置不同的镜像版本时。您可以参考本章节来构建多架构镜像,并通过docker manifest 相关命令实现一个镜像版本管理多架构的容器镜像。
前置步骤
- 检查Docker版本。
确保你使用的是支持扩展Manifest功能的Docker版本(19.03或更高)。运行以下命令查看版本:
docker --version
- 如果您的Docker版本低于19.03版本请设置实验功能环境变量。
修改experimental参数的值为true。如果没有该参数请手动添加。
"experimental": true
保存文件并重启Docker服务使修改生效。
sudo systemctl restart docker
- 验证实验功能是否已开启
echo $DOCKER_CLI_EXPERIMENTAL
- 如果输出是 enabled,则表示实验性功能已启用。
- 如果输出是 disabled 或为空,则表示实验性功能未启用。
操作步骤
- 参见创建JDK8基础镜像并上传至SWR构建并推送如下两个镜像到镜像仓库。
docker push ${repository_url}/${organization}/${image_name}:${image_tag}-amd64
docker push ${repository_url}/${organization}/${image_name}:${image_tag}-arm64
- 构建多架构镜像的 manifest。
- 创建多架构镜像 manifest。
docker manifest create --amend --insecure ${repository_url}/${organization}/${image_name}:${image_tag} ${repository_url}/${organization}/${image_name}:${image_tag}-amd64 ${repository_url}/${organization}/${image_name}:${image_tag}-arm64
- 修改镜像 manifest 文件(添加 arch 信息)。
docker manifest annotate ${repository_url}/${organization}/${image_name}:${image_tag} ${repository_url}/${organization}/${image_name}:${image_tag}-amd64 --arch amd64
docker manifest annotate ${repository_url}/${organization}/${image_name}:${image_tag} ${repository_url}/${organization}/${image_name}:${image_tag}-arm64 --arch arm64
- 创建多架构镜像 manifest。
- 推送镜像 manifest。
docker manifest push ${repository_url}/${organization}/${image_name}:${image_tag}
如何跨CPU架构下载镜像
通过--platform参数指定要拉取的镜像的架构
docker pull ${repository_url}/${organization}/${image_name}:${image_tag} --platform=linux/amd64
platform参数取值说明:
- --platform=linux/amd64: x86_64 架构的 Linux 系统。
- --platform=linux/arm64: ARM64 架构的 Linux 系统。