logo
2
1
WeChat Login
docs: 更新 README 添加 CNB_TOKEN 变量说明

Image Mirror

一个基于 CNB 平台的 Docker 镜像同步工具,通过 Issue 提交镜像列表,自动将镜像同步到国内多个镜像仓库。

功能特性

  • 支持 Docker Hub、GCR、Quay 等镜像源同步
  • 自动验证镜像格式
  • 一键同步到多个国内镜像仓库
  • 自动更新 Issue 状态和评论反馈
  • 提供镜像拉取和导入脚本

支持的目标仓库

仓库地址
腾讯云ccr.ccs.tencentyun.com
CNB Dockerdocker.cnb.cool
阿里云(北京)registry.cn-beijing.aliyuncs.com
阿里云(成都)registry.cn-chengdu.aliyuncs.com
阿里云(广州)registry.cn-guangzhou.aliyuncs.com
阿里云(杭州)registry.cn-hangzhou.aliyuncs.com
阿里云(河源)registry.cn-heyuan.aliyuncs.com
阿里云(呼和浩特)registry.cn-huhehaote.aliyuncs.com
阿里云(青岛)registry.cn-qingdao.aliyuncs.com
阿里云(上海)registry.cn-shanghai.aliyuncs.com
阿里云(深圳)registry.cn-shenzhen.aliyuncs.com
阿里云(乌兰察布)registry.cn-wulanchabu.aliyuncs.com
阿里云(张家口)registry.cn-zhangjiakou.aliyuncs.com

使用方法

1. 创建同步请求

在本仓库创建 Issue,选择「镜像同步请求」模板,填写需要同步的镜像列表。

格式要求:

  • 每行一个镜像
  • 必须包含 tag
  • 不允许附加描述或注释

支持格式:

image:tag namespace/image:tag registry/namespace/image:tag registry/namespace/path/image:tag

示例:

nginx:1.21 redis:6.2 gcr.io/kubernetes/kube-proxy:v1.18.3 quay.io/prometheus/node-exporter:v1.3.0

2. 自动同步流程

  1. 提交 Issue 后,工作流自动验证镜像格式
  2. 格式正确则自动开始同步
  3. 同步完成后更新 Issue 状态和评论

3. 拉取同步后的镜像

同步成功后,Issue 评论中会包含镜像信息,可使用以下脚本拉取:

拉取到本地并恢复原始 tag:

img=$(cat dockerhub-image.yml) for i in ${img[@]}; do tagName=$(echo $i | awk -F "/" '{print $NF}'); docker pull $i; sourceTag=$(cat images-init.yml | grep $tagName); docker tag $i $sourceTag; done

拉取并打包(用于离线环境):

img=$(cat dockerhub-image.yml) for i in ${img[@]}; do tagName=$(echo $i | awk -F "/" '{print $NF}'); filePrefix=$(echo $tagName | awk -F ":" '{print $1}'); fileSuffix=$(echo $tagName | awk -F ":" '{print $NF}'); fileName=$filePrefix--$fileSuffix.gz docker pull $i; mkdir localImage || echo 0 docker save $i -o localImage/$fileName done

导入镜像包并上传到私有仓库:

img=$(ls localImage) LOCAL_REGISTRY=your-registry.example.com LOCAL_NAMESPACE=your-namespace for i in ${img[@]}; do docker load -i $i; done img=$(cat dockerhub-image.yml) for i in ${img[@]}; do tagName=$(echo $i | awk -F "/" '{print $NF}'); specialTag=$LOCAL_REGISTRY/$LOCAL_NAMESPACE/$tagName; docker tag $i $specialTag; docker push $specialTag; done

项目结构

. ├── .cnb.yml # CNB 工作流配置 ├── auth.yml # 目标仓库认证配置 ├── images.yml # 镜像映射配置(运行时生成) ├── script.md # 使用脚本说明 └── .cnb/ ├── ISSUE_TEMPLATE/ │ └── image-mirror.yml # Issue 模板 └── scripts/ ├── check_image_format.js # 镜像格式校验 ├── generate_images_yml.js # 生成同步配置 ├── create_issue_comment.js # 创建评论 ├── update_issue_comment.js # 更新评论 ├── update_issue_title.js # 更新标题 ├── set_issue_labels.js # 设置标签 └── find_issue_comment.js # 查找评论

技术栈

  • 平台: CNB (Code&Build)
  • 同步工具: image-syncer
  • 脚本: Node.js

配置要求

需要配置以下环境变量(存储在 secret 中):

变量说明
CNB_TOKENCNB 平台 token
TARGET_REGISTRY目标镜像仓库地址
TARGET_REGISTRY_USER目标仓库用户名
TARGET_REGISTRY_PASSWORD目标仓库密码
TARGET_NAMESPACE目标命名空间

License

MIT