image-syncer

这篇具有很好参考价值的文章主要介绍了image-syncer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

github

​ ​1. 简介

一个简单、易用的批量镜像迁移和镜像同步复制工具,支持几乎所有目前主流的基于Docker Registry V2​​搭建的镜像存储服务,例如ACR、Docker、Hub、Quay、自建Harbor等,目前已经初步经过了TB级别的生产环境镜像迁移验证

  • 特性

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

2.安装

wget https://github.com/AliyunContainerService/image-syncer/releases/download/v1.0.3/image-syncer-v1.0.3-linux-amd64.tar.gz
tar zxf image-syncer-v1.0.3-linux-amd64.tar.gz && mv image-syncer /usr/local/bin/
  • 参数

    -h  --help       usage information
    
        --config     set the path of config file, this file need to be created before starting synchronization, default
                     config file is at "current/working/directory/config.json". (This flag can be replaced with flag --auth
                     and --images which for better orgnization.)
    
        --auth       set the path of authentication file, this file need to be created before starting synchronization, default
                     config file is at "current/working/directory/auth.json". This flag need to be pair used with --images.
    
        --images     set the path of image rules file, this file need to be created before starting synchronization, default
                     config file is at "current/working/directory/images.json". This flag need to be pair used with --auth.
    
        --log        set the path of log file, logs will be printed to Stderr by default 
    
        --namespace  set default-namespace, default-namespace can also be set by environment variable "DEFAULT_NAMESPACE",
                     if they are both set at the same time, "DEFAULT_NAMESPACE" will not work at this synchronization,
                     default-namespace will work only if default-registry is not empty.
    
        --registry   set default-registry, default-registry can also be set by environment variable "DEFAULT_REGISTRY",
                     if they are both set at the same time, "DEFAULT_REGISTRY" will not work at this synchronization, 
                     default-registry will work only if default-namespace is not empty.
    
        --proc       number of goroutines, default value is 5
    
        --records    image-syncer will record the information of synchronized image blobs to a disk file, this parameter will
                     set the path of the records file, default path is "current/working/directory/records", a records file can be 
                     reused to make incremental synchronization if it is really generated by yourself. image-syncer remove the 
                     dependence of records file after v1.1.0
    
        --retries    number of retries, default value is 2, the retries of failed sync tasks will start after all sync tasks
                     are executed once, reties of failed sync tasks will resolve most occasional network problems during 
                     synchronization
    
        --os         os list to filter source tags, not works for docker v2 schema1 media, takes no effect if empty
      
        --arch       architecture list to filter source tags, takes no effect if empty
    

3. 使用

3.1 Harbor To Aliyun ACR

  • 配置文件模板

    {
        "auth": {                   // 认证字段,其中每个对象为一个registry的一个账号和
                                    // 密码;通常,同步源需要具有pull以及访问tags权限,
                                    // 同步目标需要拥有push以及创建仓库权限,如果没有提供,则默认匿名访问
            "quay.io": {            // registry的url,需要和下面images中对应registry的url相同
                "username": "xxx",               // 用户名,可选
                "password": "xxxxxxxxx",         // 密码,可选
                "insecure": true                 // registry是否是http服务,如果是,insecure字段需要为true
            },
            "registry.cn-beijing.aliyuncs.com": {
                "username": "xxx",
                "password": "xxxxxxxxx"
            },
            "registry.hub.docker.com": {
                "username": "xxx",
                "password": "xxxxxxxxxx"
            }
        },
        images: {
        	        "quay.io/coreos/kube-rbac-proxy": "quay.io/ruohe/kube-rbac-proxy",
            	"xxxx":"xxxxx",
            	"xxx/xxx/xx:tag1,tag2,tag3":"xxx/xxx/xx"
        }
    }
    

    1、同步镜像规则字段,其中一条规则包括一个源仓库(键)和一个目标仓库(值)

    2、同步的最大单位是仓库(repo),不支持通过一条规则同步整个namespace以及registry

    3、源仓库和目标仓库的格式与docker pull/push命令使用的镜像url类似(registry/namespace/repository:tag)

    4、源仓库和目标仓库(如果目标仓库不为空字符串)都至少包含registry/namespace/repository

    5、源仓库字段不能为空,如果需要将一个源仓库同步到多个目标仓库需要配置多条规则

    6、目标仓库名可以和源仓库名不同(tag也可以不同),此时同步功能类似于:docker pull + docker tag + docker push

    7、当源仓库字段中不包含tag时,表示将该仓库所有tag同步到目标仓库,此时目标仓库不能包含tag 8、当源仓库字段中包含tag时,表示只同步源仓库中的一个tag到目标仓库,如果目标仓库中不包含tag,则默认使用源tag 9、源仓库字段中的tag可以同时包含多个(比如"a/b/c:1,2,3"),tag之间通过","隔开,此时目标仓库不能包含tag,并且默认使用原来的tag

    10、当目标仓库为空字符串时,会将源镜像同步到默认registry的默认namespace下,并且repo以及tag与源仓库相同,默认registry和默认namespace可以通过命令行参数以及环境变量配置,参考下面的描述

  • 创建配置文件:

    {
        "auth": {
            "172.20.5.10": {
                "username": "admin",
                "password": "Xxzx@789",
                "insecure": true
            },
            "registry.cn-beijing.aliyuncs.com": {
                "username": "352@qq.com",
                "password": "docker"
            }
        },
        "images": {
            "172.20.5.10/library/kube-apiserver": ""
        }
    }
    
  • 开始迁移:

    # 并发数为10,重试次数为10
    # 日志输出到./log文件下,不存在会自动创建,不指定的话默认会将日志打印到Stderr
    # 指定配置文件为harbor-to-acr.json,内容如上所述
    
    image-syncer --proc=10 --config=./harbor_to_acr.json --registry=registry.cn-beijing.aliyuncs.com --namespace=cloud-devops --retries=10 --log=./log  
    Start to generate sync tasks, please wait ...
    Start to handle sync tasks, please wait ...
    Finished, 0 sync tasks failed, 0 tasks generate failed
    

    日志打印

    {"level":"info","msg":"Get tags of 172.20.5.10/library/kube-apiserver successfully: [v1.20.1]","time":"2021-01-08 10:54:23"}
    {"level":"info","msg":"Generate a task for 172.20.5.10/library/kube-apiserver:v1.20.1 to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1","time":"2021-01-08 10:54:23"}
    {"level":"info","msg":"Get manifest from 172.20.5.10/library/kube-apiserver:v1.20.1","time":"2021-01-08 10:54:23"}
    {"level":"info","msg":"Get a blob sha256:f398b465657ed53ee83af22197ef61be9daec6af791c559ee5220dee5f3d94fe(647423) from 172.20.5.10/library/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:23"}
    {"level":"info","msg":"Put blob sha256:f398b465657ed53ee83af22197ef61be9daec6af791c559ee5220dee5f3d94fe(647423) to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:24"}
    {"level":"info","msg":"Get a blob sha256:cbcdf8ef32b41cd954f25c9d85dee61b05acc3b20ffa8620596ed66ee6f1ae1d(723022) from 172.20.5.10/library/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:24"}
    {"level":"info","msg":"Put blob sha256:cbcdf8ef32b41cd954f25c9d85dee61b05acc3b20ffa8620596ed66ee6f1ae1d(723022) to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:24"}
    {"level":"info","msg":"Get a blob sha256:d7d21f5bdd8303a60bac834f99867a58e6f3e1abcb6d486158a1ccb67dbf85bf(29033259) from 172.20.5.10/library/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:24"}
    {"level":"info","msg":"Put blob sha256:d7d21f5bdd8303a60bac834f99867a58e6f3e1abcb6d486158a1ccb67dbf85bf(29033259) to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:24"}
    {"level":"info","msg":"Get a blob sha256:75c7f711208082c548b935ab31e681ea30acccdce6b7abeecabae5bbfd326627(2630) from 172.20.5.10/library/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:24"}
    {"level":"info","msg":"Put blob sha256:75c7f711208082c548b935ab31e681ea30acccdce6b7abeecabae5bbfd326627(2630) to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1 success","time":"2021-01-08 10:54:25"}
    {"level":"info","msg":"Put manifest to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1","time":"2021-01-08 10:54:25"}
    {"level":"info","msg":"Synchronization successfully from 172.20.5.10/library/kube-apiserver:v1.20.1 to registry.cn-beijing.aliyuncs.com/cloud-devops/kube-apiserver:v1.20.1","time":"2021-01-08 10:54:25"}
    {"level":"info","msg":"Finished, 0 sync tasks failed, 0 tasks generate failed","time":"2021-01-08 10:54:25"}
    

3.2 Harbor To Huawei SWR

  • 创建配置文件

    {
        "auth": {
            "172.20.5.10": {
                "username": "admin",
                "password": "Xxzx@789",
                "insecure": true
            },
            "swr.cn-east-3.myhuaweicloud.com": {
                "username": "cn-east-3@8B5B8GC",
                "password": "8b0f1e69f2"
            }
        },
        "images": {
            "172.20.5.10/library/kube-apiserver": "",
            "172.20.5.10/library/controller": ""
        }
    }
    
  • 启动任务

    image-syncer --proc=10 --config=./harbor_to_swr.json --registry=swr.cn-east-3.myhuaweicloud.com --namespace=cloud-devops --retries=10 --log=./log
    Start to generate sync tasks, please wait ...
    Start to handle sync tasks, please wait ...
    Finished, 0 sync tasks failed, 0 tasks generate failed
    
    

3.3 Huawei SWR To Aliyun ACR

  • 创建日志文件

    {
        "auth": {
            "swr.cn-east-3.myhuaweicloud.com": {
                "username": "cn-east-3@8B5B8GC",
                "password": "8b0f1e6a46af8dff0ae519a09f2"
            },
            "registry.cn-beijing.aliyuncs.com": {
                "username": "352@qq.com",
                "password": "docker"
            }
        },
        "images": {
            "swr.cn-east-3.myhuaweicloud.com/cloud-devops/kube-apiserver": "",
            "swr.cn-east-3.myhuaweicloud.com/cloud-devops/controller": ""
        }
    }
    
  • 开始迁移

    image-syncer --proc=10 --config=./harbor_to_swr.json --registry=registry.cn-beijing.aliyuncs.com --namespace=cloud-devops --retries=10 --log=./log
    Start to generate sync tasks, please wait ...
    Start to handle sync tasks, please wait ...
    Finished, 0 sync tasks failed, 0 tasks generate failed
    

文章来源地址https://www.toymoban.com/news/detail-467895.html

到了这里,关于image-syncer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试hrd需要注意什么,scikit-image 中用于图像分割的阈值算法,GitHub上标星13k的《Python面试突击版》

    thresh_otsu = threshold_otsu(gray_image) binary_otsu = gray_image thresh_otsu binary_otsu = img_as_ubyte(binary_otsu) thresh_niblack = threshold_niblack(gray_image, window_size=25, k=0.8) binary_niblack = gray_image thresh_niblack binary_niblack = img_as_ubyte(binary_niblack) thresh_sauvola = threshold_sauvola(gray_image, window_size=25) binary_sauvola = gra

    2024年04月25日
    浏览(31)
  • Git分布式版本控制工具和GitHub(一)--简介

    1.Git简介 【1】什么是Git? Git就是代码版本管理工具。 【2】为什么要使用Git (1)版本控制 写代码就是不断写BUG的过程(当然我们是不会这么说的),很多时候你写了100行代码之后,突然醒悟! ​ “这是什么鬼?” “怎么不能跑了?”​ 如果没有版本留存,你想要回到昨天

    2024年02月14日
    浏览(60)
  • 如何使用CSS实现一个响应式图片幻灯片(Responsive Image Slider)效果?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月10日
    浏览(51)
  • css使用border-image和flex布局设计一个随着文字多少自适应的标题

    需求: 设计一个标题,让中间部分随着文字而撑大,同时文字渐变,两边自适应,这种情况就不能用传统的背景图片了,想到可以使用图片边框来做 解决思路:   1.需要一个大盒子和三个小盒子 2.大盒子设置display:flex; 左右两个小盒子分别设置flex-grow; 并设置背景图片 3. 给中

    2024年02月09日
    浏览(41)
  • [visionOS][Apple Vision Pro][SwiftUI] 定义一个UIImage变量,可动态改变,并显示在Image控件

    实际上,不需要加.onChange也可以的,这个只是响应myImage变化,跟Image更新图片没关系。 用@State标记一个属性时,SwitfUI会自动监听这个属性的变更,当这个属性发生改变,SwiftUI 会自动重新计算绘制视图。

    2024年02月16日
    浏览(46)
  • Github | 如何在Github上只下载一个文件或文件夹!?

    用过 github 的小伙伴们都知道,我们可以通过 git clone 命令来下载 整个项目 到本地。😘 但我最近在使用 github 的时候遇到一个 问题 ,就是我 只 想下载这 一个文件 ,其他的我都 不想要 。🫠 解决方案 大家往下看吧:👇 1️⃣ 首先我们 点开 这个文件,点击 raw 。🤜 2️⃣

    2024年01月15日
    浏览(50)
  • 如何把本地项目一次性上传github(避免一个一个上传)

    一、方法如下(亲测两次有效): 如何把本地项目上传github_本地已有工程上传github-CSDN博客  执行成功截图如下: 二、如果按照上面链接遇到问题: 问题0: 上面链接方法最后一步执行后,提示不能访问github 解决方法:再重新执行一遍代码即可(中间遇到重复创建和已存在

    2024年01月22日
    浏览(71)
  • Github Copilot: 一个强大的代码助手

    介绍: Github Copilot是由GitHub和OpenAI联合开发的一款人工智能(AI)驱动的代码助手。它基于大量的开源代码和编程语言知识进行训练,可以帮助开发人员快速生成高质量的代码片段。本文将介绍如何使用Github Copilot以及它的常用快捷键。 安装和设置: 首先,确保你的开发环境

    2024年01月17日
    浏览(43)
  • GitHub从创建一个helloworld仓库开始

    ​​​​​ 目录 创建仓库 创建分支 创建分支 创建和提交更改 打开拉取请求 合并拉取请求 后续步骤 GitHub 是一个用于版本控制和协作的代码托管平台。 它允许您和其他人随时随地协同处理项目。 本教程培训 GitHub 的基本知识,如存储库、分支、提交和拉取请求等。 您将创

    2024年02月02日
    浏览(43)
  • GitHub 组织是什么?您应该使用一个吗?

    GitHub 作为一个平台,被个人程序员和大型组织所使用。无论您与多少人一起工作,“GitHub Organizations”都为管理多个项目的人员提供了一些不错的工具。 GitHub Organizations 是 GitHub 的一项功能,允许您创建一个中心位置,团队成员可以在其中访问和管理存储库和其他资源。 组织

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包