
# 使用image-syncer迁移镜像至SWR
#### 场景描述
当我们处理数量较少的镜像迁移任务时，使用命令行迁移就可以解决这个问题。但是实际生产中涉及到成千上百个镜像，几T的镜像仓库数据时，迁移过程就变得耗时很是漫长，甚至丢失数据。这时，我们可以使用开源镜像迁移工具**[image-syncer](https://github.com/AliyunContainerService/image-syncer)**来处理这个任务。
#### 前提条件
支持公网访问，可以绑定弹性公网IP实现公网访问。
#### 操作步骤
1. [下载image-syncer](https://github.com/AliyunContainerService/image-syncer/releases)到执行机上，解压并运行工具。
   
   
   以v1.5.0版本为例，您也可以选择其他版本。
   **wget <https://github.com/AliyunContainerService/image-syncer/releases/download/v1.5.0/image-syncer-v1.5.0-linux-amd64.tar.gz>**
   **tar -zvxf image-syncer-v1.5.0-linux-amd64.tar.gz**
   
   
2. 创建镜像仓库的认证信息文件**auth.json** 。
   
   image-syncer支持基于Docker Registry V2搭建的docker镜像仓库，按格式填写即可。将源仓库及目标仓库认证信息写入，示例如下。
   ```
   {
       "swr.****.myhuaweicloud.com": {
           "username": "****@F1I3Q……",
           "password": "2fd4c869ea0……"
       },
       "swr.****.myhuaweicloud.com": {
           "username": "****@4N3FA……",
           "password": "f1c82b57855f9d35……"
       }
   }
   ```
   其中swr.××××.myhuaweicloud.com 为镜像仓库地址，username、password可以在登录命令中获取，获取方法如下：
   登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)，在总览页面右上角单击"登录指令"，在弹出的窗口中获取登录指令，如下图所示。
   图1登录指令   
   ![](https://support.huaweicloud.com/bestpractice-swr/zh-cn_image_0000001350427898.png "点击放大")
   
   
3. 创建同步镜像描述文件**images.json** 。
   
   如下示例，左边是源仓库的地址，右边是目的仓库地址。image-syncer还支持其他描述方式，具体请参见[README-zh_CN.md](https://github.com/AliyunContainerService/image-syncer/blob/master/README-zh_CN.md)。
   ```
   {
   "swr.cn-north-4.myhuaweicloud.com/org-ss/canary-consumer": "swr.cn-east-3.myhuaweicloud.com/dev-container/canary-consumer"
    
   }
   ```
   
   
4. 执行如下命令将镜像迁移至SWR。 
   ```
   ./image-syncer  --auth=./auth.json --images=./images.json  --namespace=dev-container  --registry=swr.cn-east-3.myhuaweicloud.com --retries=3  --log=./log
   ```
   表1命令行参数说明 
   | **参数**      | **说明**                                                                                                                             |
   |:---|:---|
   | --config    | 设置用户提供的配置文件路径，使用之前需要创建此文件，默认为当前工作目录下的config.json文件。这个参数与 --auth和--images 的作用相同，分解成两个参数可以更好地区分认证信息与镜像仓库同步规则。建议使用 --auth 和 --images。 |
   | --images    | 设置用户提供的镜像同步规则文件所在路径，使用之前需要创建此文件，默认为当前工作目录下的images.json文件。                                                                          |
   | --auth      | 设置用户提供的认证文件所在路径，使用之前需要创建此认证文件，默认为当前工作目录下的auth.json文件。                                                                              |
   | --log       | 打印出来的log文件路径，默认打印到标准错误输出，如果将日志打印到文件将不会有命令行输出，此时需要通过cat对应的日志文件查看。                                                                   |
   | --namespace | 设置默认的目标namespace，当配置文件内一条images规则的目标仓库为空，并且默认registry也不为空时有效，可以通过环境变量DEFAULT_NAMESPACE设置，同时传入命令行参数会优先使用命令行参数值。                     |
   | --proc      | 并发数，进行镜像同步的并发goroutine数量，默认为5。不建议修改该参数。                                                                                            |
   | --retries   | 失败同步任务的重试次数，默认为2，重试会在所有任务都被执行一遍之后开始，并且也会重新尝试对应次数生成失败任务的生成。一些偶尔出现的网络错误比如io timeout、TLS handshake timeout，都可以通过设置重试次数来减少失败的任务数量。     |
   | --registry  | 设置默认的目标registry，当配置文件内一条images规则的目标仓库为空，并且默认namespace也不为空时有效，可以通过环境变量DEFAULT_REGISTRY设置，同时传入命令行参数会优先使用命令行参数值。                      |
      
   
   
   
5. 迁移命令执行后，可登录目标镜像仓库，查看已迁移的镜像。
 
