使用image-syncer迁移/同步镜像仓库

刚好最近在迁移harbor仓库,记录一下迁移过程

本次使用的是阿里云的image-syncer开源工具,可以实现本地到阿里云、harbor到harbor之间的镜像迁移,image-syncer 的定位是一个简单、易用的批量镜像迁移/同步工具,支持几乎全部目前主流的基于 docker registry V2 搭建的镜像存储服务,好比 ACR、Docker
Hub、Quay、自建 Harbor 等仓库,目前已经初步通过了 TB 级别的生产环境镜像迁移验证,git链接 https://github.com/AliyunContainerService/image-syncer

主要有以下几个特点

1.支持多对多镜像仓库同步
2.支持基于 Docker Registry V2 搭建的 docker 镜像仓库服务 (如 Docker Hub、 Quay、 阿里云镜像服务 ACR、 Harbor等)
3.同步只通过内存和网络,不依赖磁盘存储,同步速度快
4.增量同步, 经过对同步过的镜像 blob 信息落盘,不重复同步已同步的镜像
5.并发同步,能够经过配置文件调整并发数
6.自动重试失败的同步任务,能够解决大部分镜像同步中的网络抖动问题

借助 image-syncer,只须要保证 image-syncer 的运行环境与须要同步的 registry 网络连通,你能够快速地完成从镜像仓库的迁移、拷贝以及增量同步,而且对硬件资源几乎没有要求(由于 image-syncer 严格控制网络链接数目=并发数,因此只有在当单个镜像层过大的状况下,并发数目过大可能会打满内存,内存占用 <= 并发数 x 最大镜像层大小);除了使用重传机制规避同步过程当中可能出现的偶发问题以外, image-syncer 会在运行结束时统计最后同步失败的镜像个数,而且打印出详细的日志,可以看到具体的同步数量,未同步信息等详细信息。

使用指南:

{
    "auth": {                   // 认证字段,其中每一个对象为一个registry的一个帐号和
                                // 密码;一般,同步源须要具备pull以及访问tags权限,
                                // 同步目标须要拥有push以及建立仓库权限,若是没有提供,则默认匿名访问
        
        "quay.io": {            // registry的url,须要和下面images中对应registry的url相同
            "username": "xxx",               // 用户名,可选
            "password": "xxxxxxxxx",         // 密码,可选
            "insecure": true                 // registry是不是http服务,若是是,insecure 字段须要为true,默认是false,可选,支持这个选项须要image-syncer版本 > v1.0.1
        },
        "registry.cn-beijing.aliyuncs.com": {
            "username": "xxx",
            "password": "xxxxxxxxx"
        },
        "registry.hub.docker.com": {
            "username": "xxx",
            "password": "xxxxxxxxxx"
        }
    },
    "images": {
        // 同步镜像规则字段,其中条规则包括一个源仓库(键)和一个目标仓库(值)
        
        // 同步的最大单位是仓库(repo),不支持经过一条规则同步整个namespace以及registry
        
        // 源仓库和目标仓库的格式与docker pull/push命令使用的镜像url相似(registry/namespace/repository:tag)
        // 源仓库和目标仓库(若是目标仓库不为空字符串)都至少包含registry/namespace/repository
        // 源仓库字段不能为空,若是须要将一个源仓库同步到多个目标仓库须要配置多条规则
        // 目标仓库名能够和源仓库名不一样(tag也能够不一样),此时同步功能相似于:docker pull + docker tag + docker push
        "quay.io/coreos/kube-rbac-proxy": "quay.io/ruohe/kube-rbac-proxy",
        "xxxx":"xxxxx",
        "xxx/xxx/xx:tag1,tag2,tag3":"xxx/xxx/xx"
        // 当源仓库字段中不包含tag时,表示将该仓库全部tag同步到目标仓库,此时目标仓库不能包含tag
        // 当源仓库字段中包含tag时,表示只同步源仓库中的一个tag到目标仓库,若是目标仓库中不包含tag,则默认使用源tag
        // 源仓库字段中的tag能够同时包含多个(好比"a/b/c:1,2,3"),tag之间经过","隔开,此时目标仓库不能包含tag,而且默认使用原来的tag
        
        // 当目标仓库为空字符串时,会将源镜像同步到默认registry的默认namespace下,而且repo以及tag与源仓库相同,默认registry和默认namespace能够经过命令行参数以及环境变量配置,参考下面的描述
    }    
}

使用实例:

本次迁移是harbor之间的迁移,因为只需要同步镜像,就直接进入正题了

下载链接:https://github.com/AliyunContainerService/image-syncer/releases
wget https://github.com/AliyunContainerService/image-syncer/releases/download/v1.3.1/image-syncer-v1.3.1-linux-amd64.tar.gz

解压后就可以用了 

最简单的迁移配置:

./image-syncer --proc=6 --auth=./config.json --images=./image-syncer.json --namespace=xx1 --registry=harbor2.xx.com


cat config.json   ##认证信息
{
        "harbor1.xx.com": {
            "username": "xxxx",
            "password": "xxxx",
            "insecure": true
    },
        "harbor2.xx.com": {
            "username": "xxx",
            "password": "xxxx"
    }
}

cat images-syncer.json  ##镜像列表
{
"harbor1.xx.com/xx1/storage-initializer:v0.8.0":"harbor2.xx.com/xx1/storage-initializer:v0.8.0",
"harbor1.xx.com/xx1/knative-routing-go:v1":"harbor2.xx.com/xx1/knative-routing-go:v1"
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值