# image-repo-sync **Repository Path**: cncfstack/image-repo-sync ## Basic Information - **Project Name**: image-repo-sync - **Description**: 镜像迁移工具。支持将一个仓库中的全部镜像迁移到指定的其他镜像仓库,这在私有化交付时用到第三方镜像仓库时很有用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-29 - **Last Updated**: 2024-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 镜像迁移工具 (image-repo-sync) 镜像迁移工具。支持将一个仓库中的全部镜像迁移到指定的其他镜像仓库,这在私有化交付时用到第三方镜像仓库时很有用。 ## Feature - 跨平台,支持在可运行的 Python 系统中执行,支持在可运行 Docker 容器的系统中执行 - 基于 Python 编写,在无法快速复制离线镜像文件时,可以直接复制粘贴文本到终端执行 - 同时支持 Python2、Python3(主要依赖 codecs 模块) - 支持 ARM64、AMD64、s390x 的 CPU 架构环境 - 容器版本支持镜像缓存加速,基于内存的的 docker overlay 数据目录 - 支持迁移状态记录,执行失败时可以快速执行到未执行完的任务行 - 支持迁移完成后快速清理本地缓存,节约本地磁盘或内存空间 - 支持基于Docker Registry V2搭建的docker镜像仓库服务 (如 Docker Hub、 Quay、 阿里云镜像服务ACR、 Harbor等) - 同步只经过内存和网络,不依赖磁盘存储,同步速度快 - 并发同步,可以通过配置文件调整并发数 - 自动重试失败的同步任务,可以解决大部分镜像同步中的网络抖动问题 - 增量同步, 通过对同步过的镜像blob信息落盘,不重复同步已同步的镜像 ## 使用方法: - **Docker 运行** 创建并登录到容器 ``` docker run -itd --privileged --name tmp-image-repo-sync -v : harbor.example-domain.com/qztest/image-repo-sync:v2.0.0 docker exec -it tmp-image-repo-sync bash # 迁移性能提速,使用内存作为镜像临时存放的位置,要求有一定的可用内存,建议大于 2GB mkdir /dev/shm/tmpdocker docker run -itd -v /dev/shm/tmpdocker:/var/lib/docker --privileged --name tmp-image-repo-sync -v : harbor.example-domain.com/qztest/image-repo-sync:v2.0.0 docker run -itd -v /dev/shm/tmpdocker:/var/lib/docker --privileged --net host cncfstack/image-repo-sync:v1.0.9 /root/image-repo-sync.py --srcProtocol "http://" --srcRegistry "127.0.0.1:5000" --srcRepositorie "library" --destProtocol "https://" --destRegistry "harbor.example.com" --destRepositorie "wenyu-wenyu-default" --destUsername "zhaowenyu" --destPassword "******" --cleanImage ``` 注意,在镜像迁移完成后,删除 tmp-registry,并删除 `/dev/shm/tmpdocker` 目录以释放内存 在容器中执行 ``` docker login docker run -itd -p 5000:5000 -v :/var/lib/registry --name tmp-registry registry ``` 执行镜像迁移任务: ``` ./image-repo-sync.py --srcProtocol "http://" --srcRegistry "127.0.0.1:6000" --srcRepositorie "library" --destProtocol "https://" --destRegistry "harbor.example-domain.com" --destRepositorie "wytest" --cleanImage ``` - : 宿主机上的数据目录 - :容器内的数据目录 - **执行脚本** ``` # ./image-repo-sync.py usage: image-repo-sync.py [-h] [--srcProtocol SRCPROTOCOL] [--srcRegistry SRCREGISTRY] [--srcRepositorie SRCREPOSITORIE] [--destProtocol DESTPROTOCOL] [--destRegistry DESTREGISTRY] [--destRepositorie DESTREPOSITORIE] [--cleanImage] 镜像迁移工具 optional arguments: -h, --help show this help message and exit --srcProtocol SRCPROTOCOL 原镜像仓库服务器的协议,例如: http:// --srcRegistry SRCREGISTRY 原镜像仓库服务地址,例如: localhost:5000 --srcRepositorie SRCREPOSITORIE 原镜像仓库名称,例如: library --destProtocol DESTPROTOCOL 目的镜像仓库服务器的协议,例如: https:// --destRegistry DESTREGISTRY 目的镜像仓库服务地址,例如: harbor.example-domain.com:5000 --destRepositorie DESTREPOSITORIE 目的镜像仓库名称,例如: prod --cleanImage 是否清理当前机器上缓存的镜像, Bool值默认False 注意: 在执行脚本前,需要使用 docker login 分别完成原和目的镜像仓库的登录 Example: ./image-repo-sync.py --srcProtocol "http://" --srcRegistry "127.0.0.1:6000" --srcRepositorie "library" --destProtocol "https://" --destRegistry "harbor.example-domain.com" --destRepositorie "wytest" --cleanImage ``` 执行输出: ``` # ./image-repo-sync.py --srcProtocol "http://" --srcRegistry "127.0.0.1:6000" --srcRepositorie "library" --destProtocol "https://" --destRegistry "harbor" --destRepositorie "wytest" --cleanImage ---------------- [2021-08-17 19:20:54] : ==============> 开始迁移镜像:library/adddirperm [2021-08-17 19:20:54] : 镜像pull成功: docker pull 127.0.0.1:6000/library/adddirperm:1.0.0 [2021-08-17 19:20:55] : 镜像tag修改成功: docker tag 127.0.0.1:6000/library/adddirperm:1.0.0 harbor.example-domain.com/wytest/adddirperm:1.0.0 [2021-08-17 19:20:55] : 镜像push成功: docker push harbor.example-domain.com/wytest/adddirperm:1.0.0 [2021-08-17 19:20:56] : 镜像rmi成功: docker rmi 127.0.0.1:6000/library/adddirperm:1.0.0 harbor.example-domain.com/wytest/adddirperm:1.0.0 [2021-08-17 19:20:56] : ==============> 开始迁移镜像:library/api-gateway-consul-demo [2021-08-17 19:20:56] : 镜像pull成功: docker pull 127.0.0.1:6000/library/api-gateway-consul-demo:v1.1-20191121-605992ab [2021-08-17 19:20:56] : 镜像tag修改成功: docker tag 127.0.0.1:6000/library/api-gateway-consul-demo:v1.1-20191121-605992ab harbor.example-domain.com/wytest/api-gateway-consul-demo:v1.1-20191121-605992ab [2021-08-17 19:20:57] : 镜像push成功: docker push harbor.example-domain.com/wytest/api-gateway-consul-demo:v1.1-20191121-605992ab [2021-08-17 19:20:57] : 镜像rmi成功: docker rmi 127.0.0.1:6000/library/api-gateway-consul-demo:v1.1-20191121-605992ab harbor.example-domain.com/wytest/api-gateway-consul-demo:v1.1-20191121-605992ab ...... ``` ## 镜像构建 执行如下命令构建新版本镜像 ``` ./build.sh vX.Y.Z ``` 历史版本查看仓库下 release 文件 # 同类型功能产品 - [image-syncer](https://github.com/AliyunContainerService/image-syncer?spm=a2c6h.12873639.0.0.66b165a8HrkbnA): Docker image synchronization tool for Docker Registry V2 based services