使用image-syncer来实现容器镜像同步
image-syncer
是一个 docker 镜像同步工具,可用来进行多对多的镜像仓库同步,支持目前绝大多数主流的 docker 镜像仓库服务
- 支持多对多镜像仓库同步
- 支持基于 Docker Registry V2 搭建的 docker 镜像仓库服务 (如 Docker Hub、 Quay、 阿里云镜像服务 ACR、 Harbor 等)
- 同步只经过内存和网络,不依赖磁盘存储,同步速度快
- 增量同步, 通过对同步过的镜像 blob 信息落盘,不重复同步已同步的镜像
- 并发同步,可以通过配置文件调整并发数
- 自动重试失败的同步任务,可以解决大部分镜像同步中的网络抖动问题
- 不依赖 docker 以及其他程序
image-syncer 的官方地址是:https://github.com/AliyunContainerService/image-syncer, 是 golang 开发的, 官方没有给打包成 windows 版, 所以 windows 和 mac 用户需要自己编译一下。
编译
安装 golang 环境
略
开始构建
1 | go build main.go |
会在当前目录下生成 main.exe, 重命名为 image-syncer.exe
使用方法
由于我们需求是进行单镜像同步,所以用不到 image-syncer 的仓库同步功能,仓库同步配置注释在了配置文件中。
账号密码配置: auth.json
1 | { |
- 仓库名支持 “registry” 和 “registry/namespace”(v1.0.3 之后的版本) 的形式,需要跟下面 images 中的 registry(registry/namespace) 对应 ,images 中被匹配到的的 url 会使用对应账号密码进行镜像同步, 优先匹配 “registry/namespace” 的形式
- “username”: “xxx”, // 用户名,可选,(v1.3.1 之后支持)valuse 使用 “
${env}
“ 或者 “$env” 类型的字符串可以引用环境变量 - “password”: “xxxxxxxxx”, // 密码,可选,(v1.3.1 之后支持)valuse 使用 “${env}” 或者 “$env” 类型的字符串可以引用环境变量
- “insecure”: true // registry 是否是 http 服务,如果是,insecure 字段需要为 true,默认是 false,可选,支持这个选项需要 image-syncer 版本 > v1.0.1
镜像配置 image.json
1 | { |
1 | 同步镜像规则字段,其中条规则包括一个源仓库(键)和一个目标仓库(值) |
同步命令
1 | image-syncer.exe --proc=6 --auth=auth.json --images=image.json --retries=3 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
评论