
# 如何制作多架构镜像
#### 操作场景
当您需要针对x86、ARM架构分别构建镜像并设置不同的镜像版本时。您可以参考本章节来构建多架构镜像，并通过docker manifest 相关命令实现一个镜像版本管理多架构的容器镜像。
#### 前置步骤
1. 检查Docker版本。 确保你使用的是支持扩展Manifest功能的Docker版本（19.03或更高）。运行以下命令查看版本：
   ```
   docker --version
   ```
   
2. 如果您的Docker版本低于19.03版本请设置实验功能环境变量。
   打开Docker守护进程的配置文件/etc/docker/daemon.json。
   ```
   vim /etc/docker/daemon.json
   ```
   修改experimental参数的值为true。如果没有该参数请手动添加。
   ```
   "experimental": true
   ```
   保存文件并重启Docker服务使修改生效。
   ```
   sudo systemctl restart docker
   ```
   
3. 验证实验功能是否已开启
   ```
   echo $DOCKER_CLI_EXPERIMENTAL
   ```
   ![](https://support.huaweicloud.com/bestpractice-swr/zh-cn_image_0000002426754873.png)
   - 如果输出是 enabled，则表示实验性功能已启用。
   
   - 如果输出是 disabled 或为空，则表示实验性功能未启用。
    
 
#### 操作步骤
1. 参见[创建JDK8基础镜像并上传至SWR](https://support.huaweicloud.com/bestpractice-swr/swr_bestpractice_0102.html)构建并推送如下两个镜像到镜像仓库。
   
   ```
   docker push ${repository_url}/${organization}/${image_name}:${image_tag}-amd64
   ```
   ```
   docker push ${repository_url}/${organization}/${image_name}:${image_tag}-arm64
   ```
   
   
2. 构建多架构镜像的 manifest。 
   1. 创建多架构镜像 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
      ```
      
   
   
   
   2. 修改镜像 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
      ```
      
   
   
   
   
3. 推送镜像 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
```
![](https://support.huaweicloud.com/bestpractice-swr/zh-cn_image_0000002456916217.png "点击放大")
platform参数取值说明：
- --platform=linux/amd64： x86_64 架构的 Linux 系统。
- --platform=linux/arm64： ARM64 架构的 Linux 系统。
 
