容器镜像迁移 使用imagesyncer迁移镜像至SWR 当我们处理数量较少的镜像迁移任务时,使用命令行迁移就可以解决这个问题。但是实际生产中涉及到成千上百个镜像,几T的镜像仓库数据时,迁移过程就变得耗时很是漫长,甚至丢失数据。这时,我们可以使用开源镜像迁移工具imagesyncer来处理这个任务。 步骤 1 下载imagesyncer,解压并运行工具。 以v1.3.1版本为例,您也可以选择其他版本。 wget zvxf imagesyncerv1.3.1linuxamd64.tar.gz 步骤 2 创建镜像仓库的认证信息文件auth.json。 imagesyncer支持基于 Docker Registry V2 搭建的 docker 镜像仓库,按格式填写即可。 将源仓库及目标仓库认证信息写入,示例如下。 { "swr.cngz1.ctyun.cn": { "username": "cngz1@F1I3Q……", "password": "2fd4c869ea0……" }, "swr.cngz4.ctyun.cn": { "username": "cngz4@4N3FA……", "password": "f1c82b57855f9d35……" } } username、password可以在登录命令中获取,获取方法如下: 登录SWR控制台,在右上角单击“登录指令”,在弹出的窗口中获取登录指令,如下图所示。 注意 因安全性要求,以上示例中所有username和password均有部分内容进行省略,请以控制台获取到的实际用户名和密码为准。 步骤 3 创建同步镜像描述文件images.json。 如下示例,左边是源仓库的地址,右边是目的仓库地址。imagesyncer还支持其他描述方式,详见官网说明。 {"swr.cnnorth4.myhuaweicloud.com/orgss/canaryconsumer": "swr.cneast3.myhuaweicloud.com/devcontainer/canaryconsumer"} 步骤 4 执行如下命令将镜像迁移至SWR。 ./imagesyncer auth./auth.json images./images.json namespacedevcontainer registryswr.cneast3.myhuaweicloud.com retries3 log./log 命令行参数说明。 参数 说明 config 设置用户提供的配置文件路径,使用之前需要创建此文件,默认为当前工作目录下的config.json文件。这个参数与 auth和images 的作用相同,分解成两个参数可以更好地区分认证信息与镜像仓库同步规则。建议使用 auth 和 images. images 设置用户提供的镜像同步规则文件所在路径,使用之前需要创建此文件,默认为当前工作目录下的images.json文件 auth 设置用户提供的认证文件所在路径,使用之前需要创建此认证文件,默认为当前工作目录下的auth.json文件 log 打印出来的log文件路径,默认打印到标准错误输出,如果将日志打印到文件将不会有命令行输出,此时需要通过cat对应的日志文件查看 namespace 设置默认的目标namespace,当配置文件内一条images规则的目标仓库为空,并且默认registry也不为空时有效,可以通过环境变量DEFAULTNAMESPACE设置,同时传入命令行参数会优先使用命令行参数值 proc 并发数,进行镜像同步的并发goroutine数量,默认为5 retries 失败同步任务的重试次数,默认为2,重试会在所有任务都被执行一遍之后开始,并且也会重新尝试对应次数生成失败任务的生成。一些偶尔出现的网络错误比如io timeout、TLS handshake timeout,都可以通过设置重试次数来减少失败的任务数量 registry 设置默认的目标registry,当配置文件内一条images规则的目标仓库为空,并且默认namespace也不为空时有效,可以通过环境变量DEFAULTREGISTRY设置,同时传入命令行参数会优先使用命令行参数值 迁移命令执行后,可登录目标镜像仓库,查看已迁移的镜像。