借助于阿里云开源的镜像同步工具image-syncer实现harbor及阿里云镜像仓库之间的镜像迁移
下载镜像同步工具
curl -fL "https://wiseo-generic.pkg.coding.net/wiseo/tools/image-syncer?version=latest" -o image-syncer && chmod 777 image-syncer
编写配置文件auth.yaml,模板如下
quay.io: #支持 "registry" 和 "registry/namespace"(v1.0.3之后的版本) 的形式,image-syncer 会自动为镜像同步规则中的每个源/目标 url 查找认证信息,并且使用对应认证信息进行进行访问,如果匹配到了多个,用“最长匹配”的那个作为最终结果
username: xxx
password: xxxxxxxxx
insecure: true # 可选,(v1.0.1 之后支持)registry是否是http服务,如果是,insecure 字段需要为 true,默认是 false
registry.cn-beijing.aliyuncs.com:
username: xxx # 可选,(v1.3.1 之后支持)value 使用 "${env}" 或者 "$env" 形式可以引用环境变量
password: xxxxxxxxx # 可选,(v1.3.1 之后支持)value 使用 "${env}" 或者 "$env" 类型的字符串可以引用环境变量
docker.io:
username: "${env}"
password: "$env"
quay.io/coreos:
username: abc
password: xxxxxxxxx
insecure: true
编写镜像迁移文件 images.ymal
说明
registry.cn-shanghai.aliyuncs.com/namespace/projectname: harbor地址/namespace/projectname
同步镜像
./image-syncer --proc=6 --auth=./auth.yaml --images=./images.yaml --retries=3 --log=./log
每条镜像同步规则为一个 “源镜像 url: 目标镜像 url” 的键值对。无论是源镜像 url 还是目标镜像 url,字符串格式都和 docker pull 命令所使用的镜像 url 大致相同(registry/repository:tag、registry/repository@digest),但在 tag 和 digest 配置上和 docker pull 所使用的 url 存在区别,这里对整体逻辑进行描述:
源镜像 url、目标镜像 url 都不能为空
源镜像 url 不包含 tag 和 digest 时,代表同步源镜像 repository 中的所有镜像 tag
源镜像 url 可以包含一个或多个 tag,多个 tag 之间用英文逗号分隔,代表同步源镜像 repository 中的多个指定镜像 tag
源镜像 url 可以但最多只能包含一个 digest,此时如果目标镜像 url 包含 digest,digest 必须一致
源镜像 url 的 "tag" 可以是一个正则表达式,需要额外在首尾加上 / 字符作为标识,源镜像 repository 中所有匹配正则表达式的镜像 tag 会被同步,不支持多个正则表达式 目标镜像 url 可以不包含 tag 和 digest,表示所有需同步的镜像保持其镜像 tag 或者 digest 不变
目标镜像 url 可以包含多个 tag 或者 digest,数量必须与源镜像 url 中的 tag 数量相同,此时,同步后的镜像 tag 会被修改成目标镜像 url 中指定的镜像 tag(按照从左到右顺序对应) 支持同时指定多个目标镜像 url,此时 "目标镜像 url" 为数组的形式,数组的每个元素(字符串)都需要满足前面的规则
quay.io/coreos/kube-rbac-proxy: quay.io/ruohe/kube-rbac-proxy
quay.io/coreos/kube-rbac-proxy:v1.0: quay.io/ruohe/kube-rbac-proxy
quay.io/coreos/kube-rbac-proxy:v1.0,v2.0: quay.io/ruohe/kube-rbac-proxy
quay.io/coreos/kube-rbac-proxy@sha256:14b267eb38aa85fd12d0e168fffa2d8a6187ac53a14a0212b0d4fce8d729598c: quay.io/ruohe/kube-rbac-proxy
quay.io/coreos/kube-rbac-proxy:v1.1:
- quay.io/ruohe/kube-rbac-proxy1
- quay.io/ruohe/kube-rbac-proxy2
quay.io/coreos/kube-rbac-proxy:/a+/: quay.io/ruohe/kube-rbac-proxy
更多参数
image-syncer 的使用比较简单,但同时也支持多个命令行参数的指定:
-h --help 使用说明,会打印出一些启动参数的当前默认值
--config 设置用户提供的配置文件路径,使用之前需要创建此文件,默认为当前工作目录下的config.json文件。这个参数与 --auth和--images 的
作用相同,分解成两个参数可以更好地区分认证信息与镜像仓库同步规则。建议使用 --auth 和 --images.
--auth 设置用户提供的认证文件所在路径,使用之前需要创建此认证文件,默认为当前工作目录下的auth.json文件
--images 设置用户提供的镜像同步规则文件所在路径,使用之前需要创建此文件,默认为当前工作目录下的images.json文件
--log 打印出来的log文件路径,默认打印到标准错误输出,如果将日志打印到文件将不会有命令行输出,此时需要通过cat对应的日志文件查看
--proc 并发数,进行镜像同步的并发goroutine数量,默认为5
--retries 失败同步任务的重试次数,默认为2,重试会在所有任务都被执行一遍之后开始,并且也会重新尝试对应次数生成失败任务的生成。一些偶尔出现的网络错误比如io timeout、TLS handshake timeout,都可以通过设置重试次数来减少失败的任务数量
--os 用来过滤源 tag 的 os 列表,为空则没有任何过滤要求,只对非 docker v2 schema1 media 类型的镜像格式有效
--arch 用来过滤源 tag 的 architecture 列表,为空则没有任何过滤要求
--force 同步已经存在的、被忽略的镜像,这个操作会更新已存在镜像的时间戳
Comments