logo
0
0
Login
ForkfromBring/Tools/MirrorRepository, ahead:main1 commits
chore: 更新docker.yml中的镜像仓库和镜像列表

Docker Registry Mirror Sync Script

本项目用于将多个上游 Docker Registry 的镜像同步到自定义的国内镜像仓库。
原始仓库来源:https://cnb.cool/1panel/image
本仓库在其基础上进行了二开与优化,加入了更灵活的配置格式与命名空间支持。


✨ 特性特点

  • 支持多个 Registry(如 docker.ioghcr.io 等)
  • 通过 docker.yml 灵活配置镜像与命名空间
  • 支持自定义 repo(目标命名空间),自动转换为小写
  • 未配置 repo 时自动使用 CNB_REPO_SLUG_LOWERCASE
  • 自动跳过示例镜像(如 example/example:latest
  • 自动将 / 替换为 - 作为目标镜像名称,避免仓库不兼容
  • 使用 crane 实现高效镜像复制
  • 适合 CNB 云原生构建环境或 GitHub Actions 执行

📦 配置文件说明(docker.yml)

当前支持的结构如下:

# 可选:自定义目标仓库命名空间(会自动转换为小写) repo: Bring/Tools/MirrorRepository # 需要同步的镜像列表 library: docker.io: - example/example:latest # 示例镜像,不会同步 - redis:latest - openresty/openresty:latest ghcr.io: - example/example:latest # 示例镜像,不会同步 - umami-software/umami:latest

📝 命名空间规则(非常重要)

配置情况使用的命名空间
repo:使用其内容并自动转为小写,例如:Bring/Tools/Repobring/tools/repo
repo:使用环境变量 CNB_REPO_SLUG_LOWERCASE

📝 示例镜像规则

任何镜像以 example/ 开头都会被跳过:

example/example:latest example/placeholder:1.0

这些仅用于示例展示,不会参与同步。


🚀 使用方法

1. 安装依赖

需要安装:

  • bash
  • yq(用于解析 YAML)
  • crane(用于镜像复制)

macOS:

brew install yq brew install go-containerregistry

Linux:

sudo wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 sudo chmod +x /usr/local/bin/yq wget https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz tar -xvf go-containerregistry_Linux_x86_64.tar.gz sudo mv crane /usr/local/bin/

2. 设置运行环境

必须配置目标镜像仓库:

export CNB_DOCKER_REGISTRY="registry.example.com" export CNB_REPO_SLUG_LOWERCASE="mirror" # 当 docker.yml 未设置 repo 时生效

3. 执行同步脚本

bash sync.sh

脚本会根据配置:

  • 检查是否有自定义 repo
  • 遍历 library 下的 registry 和镜像
  • 跳过示例镜像
  • 将上游镜像同步到本地仓库中

📜 sync.sh 脚本逻辑简介

脚本主要流程:

  1. 读取 repo 字段,确定命名空间(自动转小写)
  2. 遍历 library 下的所有 registry
  3. 跳过示例镜像 example/*
  4. 将镜像名中的 / 转换为 -
  5. 使用 crane copy 从源 registry 拉取镜像并推送到目标仓库
  6. 输出执行状态日志

🤝 二开说明

本项目基于 https://cnb.cool/1panel/image 进行二次开发,调整了配置结构并增加了 repo 命名空间支持,优化了脚本逻辑与可读性。

About

No description, topics, or website provided.