diff --git a/.codelf/_changelog.md b/.codelf/_changelog.md new file mode 100644 index 0000000..ee4b084 --- /dev/null +++ b/.codelf/_changelog.md @@ -0,0 +1,58 @@ +## 2024-12-19 16:00:00 + +### 1. 优化 GitHub Actions 工作流,支持自动触发和默认配置 + +**Change Type**: feature + +> **Purpose**: 优化镜像同步工作流,实现 images.txt 文件变更时自动触发,并提供更好的用户体验 +> **Detailed Description**: +> 1. 添加了智能配置系统,支持自动触发时使用默认配置,手动触发时使用自定义参数 +> 2. 改进了镜像列表读取逻辑,支持注释行和空行过滤 +> 3. 增强了镜像处理流程,提供详细的步骤日志和错误处理 +> 4. 优化了结果统计和状态反馈机制 +> 5. 更新了 images.txt 文件格式,添加了详细的使用说明和示例 +> 6. 重写了 README.md,提供更清晰的使用指南和功能介绍 +> **Reason for Change**: 用户反馈希望 images.txt 文件变更时能自动触发镜像同步,提高使用便利性 +> **Impact Scope**: 影响整个工作流的执行逻辑,但保持向后兼容性 +> **API Changes**: 工作流输入参数保持不变,新增环境变量支持 +> **Configuration Changes**: +> - 工作流新增默认配置逻辑 +> - images.txt 文件格式优化,支持注释和示例 +> - README.md 完全重写 +> **Performance Impact**: 提高了工作流的健壮性和用户体验,无负面性能影响 + + ``` + root + - .github/workflows/ + - docker-pull.yml // refact - 重构工作流,支持自动触发和智能配置 + - images.txt // refact - 优化格式,添加注释和使用说明 + - README.md // refact - 完全重写,提供详细的使用指南 + ``` + +## 2024-12-19 15:30:00 + +### 1. 初始化 .codelf 项目文档目录 + +**Change Type**: docs + +> **Purpose**: 为 Docker 镜像拉取推送项目建立完整的项目文档体系 +> **Detailed Description**: 创建了 .codelf 目录并初始化了三个核心文档文件:project.md(项目概述)、attention.md(开发指南)、_changelog.md(变更日志)。详细分析了项目结构、技术栈、开发规范和安全要求。 +> **Reason for Change**: 项目缺乏系统性的文档,需要建立标准化的项目信息管理体系,便于后续开发和维护 +> **Impact Scope**: 不影响现有功能,仅增加文档支持 +> **API Changes**: 无 API 变更 +> **Configuration Changes**: 新增 .codelf 目录及相关 markdown 文件 +> **Performance Impact**: 无性能影响,仅为文档变更 + + ``` + root + - .codelf/ // add - 项目文档目录 + - project.md // add - 项目概述和结构说明 + - attention.md // add - 开发指南和最佳实践 + - _changelog.md // add - 变更日志记录 + - .github/ // - GitHub Actions 配置目录 + - workflows/ // - 工作流定义目录 + - docker-pull.yml // - 镜像拉取推送主工作流 + - .gitignore // - Git 忽略文件配置 + - README.md // - 项目使用说明 + - images.txt // - 镜像列表配置文件 + ``` \ No newline at end of file diff --git a/.codelf/attention.md b/.codelf/attention.md new file mode 100644 index 0000000..b14da3f --- /dev/null +++ b/.codelf/attention.md @@ -0,0 +1,116 @@ +## Development Guidelines + +### Framework and Language +> 本项目主要基于 GitHub Actions 和 Shell 脚本,专注于 Docker 镜像同步的自动化流程。 + +**GitHub Actions 框架考虑:** +- 版本兼容性:使用稳定版本的 Actions(如 actions/checkout@v2),避免使用过新的版本导致兼容性问题 +- 功能利用:充分利用 GitHub Actions 的工作流特性,如手动触发、文件变更触发等 +- 性能模式:合理使用 continue-on-error 确保工作流的健壮性 +- 升级策略:定期检查 Actions 版本更新,但要确保向后兼容性 +- 框架重要注意事项: + * GitHub Actions 有运行时间限制,大量镜像同步需要考虑分批处理 + * Secrets 管理要严格,避免密码泄露 + * 网络连接稳定性影响镜像拉取成功率 + +**Shell 脚本最佳实践:** +- 错误处理:使用适当的错误检查和 continue-on-error 机制 +- 变量安全:正确处理包含特殊字符的镜像名称和标签 +- 日志输出:提供清晰的执行状态反馈 +- 脚本可读性:使用有意义的变量名和注释 + +### Code Abstraction and Reusability +> 本项目虽然结构简单,但在 GitHub Actions 工作流设计上体现了良好的模块化思想。优先使用现有的 Actions 组件而不是重新发明轮子。 +> 当前项目的组件结构和功能模块划分如下: + + +**模块化设计原则:** +- 单一职责:每个步骤只负责一个特定功能(检出代码、登录、拉取推送等) +- 高内聚低耦合:相关操作集中在同一个 job 中,减少步骤间的依赖 +- 稳定接口:使用标准的 GitHub Actions 输入输出接口 + +**可复用组件结构:** +``` +root +- .github/workflows/ + - docker-pull.yml // 主工作流,包含以下可复用模块: + - 代码检出模块 // 使用 actions/checkout@v2 + - 镜像列表读取模块 // 读取并解析 images.txt 文件 + - Docker 登录模块 // 处理各种镜像仓库的登录认证 + - 镜像处理模块 // 拉取、标记、推送的核心逻辑 + - 错误处理模块 // 统一的成功/失败状态检查 +- images.txt // 配置文件,支持批量镜像定义 +- README.md // 使用说明,可作为模板复用到其他类似项目 +``` + +### Coding Standards and Tools +**GitHub Actions 工作流规范:** +- YAML 格式规范:使用一致的缩进(2个空格)和结构 +- 命名规范:使用中文名称提高可读性(如 "拉取镜像推送") +- 步骤命名:使用描述性的中文名称(如 "检出代码库"、"登录到 Docker 仓库") + +**Shell 脚本编码规范:** +- 变量命名:使用大写字母和下划线(如 TARGET_REGISTRY) +- 错误处理:每个关键操作都要有相应的错误检查 +- 日志输出:提供清晰的中文状态信息 + +**配置文件规范:** +- images.txt:每行一个镜像,格式为 image:tag +- 注释规范:在 YAML 文件中使用适当的注释说明复杂逻辑 +- 目录结构:遵循 GitHub Actions 标准目录结构 + +### 镜像同步协作标准 +**镜像仓库集成规范:** +- 支持多种镜像仓库 + * Docker Hub、阿里云、腾讯云等主流镜像仓库 + * 统一的登录认证机制 + * 标准化的镜像命名和标签处理 +- 及时的状态反馈 + * 登录成功/失败状态检查 + * 镜像推送成功/失败状态检查 + * 详细的错误信息输出 +- 统一的错误处理规范 + * 使用 continue-on-error 确保工作流健壮性 + * 提供清晰的中文错误信息 + +**数据流处理:** +- 清晰的镜像列表管理 + * 从 images.txt 文件读取镜像列表 + * 支持批量处理多个镜像 + * 自动解析镜像名称和标签 +- 镜像数据验证 + * 验证镜像名称格式的正确性 + * 检查目标仓库的可访问性 + * 确保架构参数的有效性 +- 标准化的异步操作处理 + * 使用 GitHub Actions 的并发控制 + * 合理的超时设置和重试机制 + +### Performance and Security +**性能优化重点:** +- 镜像传输优化 + * 使用多架构支持减少不必要的镜像拉取 + * 合理设置并发数量避免网络拥塞 + * 利用 Docker 层缓存机制提高效率 +- 工作流执行优化 + * 使用 continue-on-error 避免单个镜像失败影响整体流程 + * 合理的超时设置防止长时间等待 + * 批量处理镜像减少工作流启动开销 +- 适当的缓存策略 + * 利用 GitHub Actions 的缓存机制 + * Docker 镜像层的本地缓存利用 + * 避免重复拉取相同的基础镜像 + +**安全措施:** +- 输入验证和过滤 + * 验证镜像名称和标签的格式正确性 + * 防止恶意镜像名称注入 + * 检查目标仓库地址的合法性 +- 敏感信息保护 + * 使用 GitHub Secrets 安全存储仓库凭据 + * 避免在日志中暴露密码和令牌 + * 定期轮换仓库访问凭据 +- 访问控制机制 + * 限制工作流的手动触发权限 + * 使用最小权限原则配置仓库访问 + * 监控异常的镜像同步活动 \ No newline at end of file diff --git a/.codelf/project.md b/.codelf/project.md new file mode 100644 index 0000000..5cd5020 --- /dev/null +++ b/.codelf/project.md @@ -0,0 +1,64 @@ +## Docker 镜像拉取推送工具 (Docker Image Pull & Push Tool) + +> 一个基于 GitHub Actions 的 Docker 镜像拉取和推送自动化工具,支持从任意镜像仓库拉取镜像并推送到目标仓库 + +> 项目目的:解决 Docker 镜像在不同仓库间同步的问题,特别是从国外镜像仓库同步到国内镜像仓库,提高镜像拉取速度和可用性 + +> 项目状态:活跃开发中,支持多架构镜像同步 + +> 项目团队:个人开源项目 + +> 技术栈:GitHub Actions、Docker、Shell 脚本、YAML 配置 + + + +## Dependencies (GitHub Actions 和 Docker 依赖) + +* actions/checkout@v2: GitHub Actions 官方代码检出动作 +* Docker Engine: 容器运行时环境,用于镜像拉取、标记和推送操作 +* Ubuntu Latest Runner: GitHub Actions 运行环境 + + +## Development Environment + +> 开发和运行环境要求 + +**必需环境:** +- GitHub 账号和仓库 +- Docker 仓库账号(如 Docker Hub、阿里云、腾讯云等) +- 网络连接(能够访问源镜像仓库和目标镜像仓库) + +**配置要求:** +- 在 GitHub 仓库的 Settings -> Secrets and variables -> Actions 中配置: + - DOCKER_USERNAME: Docker 仓库用户名 + - DOCKER_PASSWORD: Docker 仓库密码 + +**运行方式:** +- 手动触发:在 Actions 页面点击 "Run workflow" +- 自动触发:当 images.txt 文件发生变化时自动运行 + + +## Structure (项目结构详细分析) + +> 项目结构简洁明了,主要包含 GitHub Actions 工作流配置和镜像列表文件 + +``` +root +- .github/ # GitHub 特定配置目录 + - workflows/ # GitHub Actions 工作流目录 + - docker-pull.yml # 【核心文件】主要的镜像拉取推送工作流 + # 功能:定义完整的镜像同步流程 + # 支持多架构:amd64, arm64, arm/v7, arm/v6, 386, s390x, ppc64le + # 工作流程:检出代码 -> 读取镜像列表 -> 登录仓库 -> 拉取标记推送镜像 + # 输入参数:镜像文件路径、目标仓库地址、空间名称、系统架构 + # 错误处理:包含登录失败和推送失败的检查机制 +- .gitignore # Git 忽略文件配置 +- README.md # 【重要文件】项目说明文档 + # 包含详细的使用方法和配置步骤 + # 说明如何 Fork 项目、配置密钥、运行工作流 + # 提供了完整的操作示例和注意事项 +- images.txt # 【核心文件】镜像列表配置文件 + # 格式:每行一个镜像,格式为 image:tag + # 当前包含:goharbor/harbor-portal:v2.12.1, goharbor/harbor-core:v2.12.1 + # 文件变更会自动触发工作流执行 +``` diff --git a/.github/workflows/docker-pull.yml b/.github/workflows/docker-pull.yml index f249f4e..995e31b 100644 --- a/.github/workflows/docker-pull.yml +++ b/.github/workflows/docker-pull.yml @@ -1,24 +1,23 @@ name: 拉取镜像推送 on: + push: + paths: + - 'images.txt' workflow_dispatch: inputs: - IMAGE_NAME: - description: '原镜像名称:版本' + IMAGES_FILE: + description: '镜像列表文件路径' required: true - default: 'mysql/mysql-server' - NEW_NAME: - description: '同步后镜像名称:版本' - required: true - default: 'mysql-server' + default: 'images.txt' TARGET_REGISTRY: description: '仓库地址' required: true - default: 'registry.cn-chengdu.aliyuncs.com' + default: 'crpi-4a2bcohw4rh1g57m.cn-guangzhou.personal.cr.aliyuncs.com' TARGET_REPOSITORY: description: '空间名称' required: true - default: 'aopkcn' + default: 'xin-devops' ARCH: description: '系统架构' required: true @@ -29,7 +28,7 @@ on: - arm64 - arm/v7 - arm/v6 - - 386 + - "386" - s390x - ppc64le @@ -37,9 +36,52 @@ jobs: build: runs-on: ubuntu-latest steps: + - name: 检出代码库 + uses: actions/checkout@v2 + + - name: 设置默认配置 + id: set_defaults + run: | + # 设置默认值,支持自动触发和手动触发 + if [ "${{ github.event_name }}" = "push" ]; then + echo "IMAGES_FILE=images.txt" >> $GITHUB_ENV + echo "TARGET_REGISTRY=crpi-4a2bcohw4rh1g57m.cn-guangzhou.personal.cr.aliyuncs.com" >> $GITHUB_ENV + echo "TARGET_REPOSITORY=xin-devops" >> $GITHUB_ENV + echo "ARCH=amd64" >> $GITHUB_ENV + else + echo "IMAGES_FILE=${{ github.event.inputs.IMAGES_FILE }}" >> $GITHUB_ENV + echo "TARGET_REGISTRY=${{ github.event.inputs.TARGET_REGISTRY }}" >> $GITHUB_ENV + echo "TARGET_REPOSITORY=${{ github.event.inputs.TARGET_REPOSITORY }}" >> $GITHUB_ENV + echo "ARCH=${{ github.event.inputs.ARCH }}" >> $GITHUB_ENV + fi + echo "触发方式: ${{ github.event_name }}" + echo "镜像文件: $IMAGES_FILE" + echo "目标仓库: $TARGET_REGISTRY" + echo "空间名称: $TARGET_REPOSITORY" + echo "系统架构: $ARCH" + + - name: 读取镜像列表文件 + id: read_images + run: | + # 检查镜像文件是否存在 + if [ ! -f "${{ env.IMAGES_FILE }}" ]; then + echo "错误: 镜像文件 ${{ env.IMAGES_FILE }} 不存在" + exit 1 + fi + + # 读取并过滤空行和注释行 + images=$(grep -v '^#' ${{ env.IMAGES_FILE }} | grep -v '^$' | tr '\n' ' ') + if [ -z "$images" ]; then + echo "警告: 镜像文件中没有找到有效的镜像配置" + exit 1 + fi + + echo "读取到的镜像列表: $images" + echo "images=$images" >> $GITHUB_ENV + - name: 登录到 Docker 仓库 id: login - run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} ${{ github.event.inputs.TARGET_REGISTRY }} + run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} ${{ env.TARGET_REGISTRY }} continue-on-error: true - name: 检查 Docker 登录成功 @@ -53,15 +95,100 @@ jobs: - name: 拉取、标记并推送 Docker 镜像 id: pull_tag_push run: | - docker pull --platform ${{ github.event.inputs.ARCH }} ${{ github.event.inputs.IMAGE_NAME }} - docker tag ${{ github.event.inputs.IMAGE_NAME }} ${{ github.event.inputs.TARGET_REGISTRY }}/${{ github.event.inputs.TARGET_REPOSITORY }}/${{ github.event.inputs.NEW_NAME }} - docker push ${{ github.event.inputs.TARGET_REGISTRY }}/${{ github.event.inputs.TARGET_REPOSITORY }}/${{ github.event.inputs.NEW_NAME }} + success_count=0 + fail_count=0 + + for image in ${{ env.images }}; do + echo "=== 处理镜像: $image ===" + + # 解析镜像名称和标签 + if [[ "$image" == *":"* ]]; then + original_image=$(echo $image | cut -d':' -f1) + tag=$(echo $image | cut -d':' -f2) + else + original_image=$image + tag="latest" + fi + + base_image=$(basename $original_image) + new_image="${{ env.TARGET_REGISTRY }}/${{ env.TARGET_REPOSITORY }}/$base_image:$tag" + + echo "源镜像: $original_image:$tag" + echo "目标镜像: $new_image" + echo "系统架构: ${{ env.ARCH }}" + + # 拉取镜像 + if docker pull --platform ${{ env.ARCH }} $original_image:$tag; then + echo "✅ 镜像拉取成功: $original_image:$tag" + + # 标记镜像 + if docker tag $original_image:$tag $new_image; then + echo "✅ 镜像标记成功: $new_image" + + # 推送镜像 + if docker push $new_image; then + echo "✅ 镜像推送成功: $new_image" + success_count=$((success_count + 1)) + else + echo "❌ 镜像推送失败: $new_image" + fail_count=$((fail_count + 1)) + fi + else + echo "❌ 镜像标记失败: $new_image" + fail_count=$((fail_count + 1)) + fi + else + echo "❌ 镜像拉取失败: $original_image:$tag" + fail_count=$((fail_count + 1)) + fi + + echo "" # 空行分隔 + done + + echo "=== 处理结果汇总 ===" + echo "成功: $success_count 个镜像" + echo "失败: $fail_count 个镜像" + + # 设置输出变量 + echo "success_count=$success_count" >> $GITHUB_ENV + echo "fail_count=$fail_count" >> $GITHUB_ENV + + # 如果有失败的镜像,设置失败状态 + if [ $fail_count -gt 0 ]; then + exit 1 + fi continue-on-error: true - - name: 检查镜像推送成功 - if: ${{ steps.pull_tag_push.outcome == 'success' }} - run: echo "Docker 镜像推送成功" - - - name: 检查镜像推送失败 - if: ${{ steps.pull_tag_push.outcome != 'success' }} - run: echo "Docker 镜像推送失败" + - name: 输出最终结果 + if: always() + run: | + echo "=== 工作流执行结果 ===" + echo "触发方式: ${{ github.event_name }}" + echo "目标仓库: ${{ env.TARGET_REGISTRY }}" + echo "空间名称: ${{ env.TARGET_REPOSITORY }}" + echo "系统架构: ${{ env.ARCH }}" + + if [ "${{ steps.login.outcome }}" = "success" ]; then + echo "✅ Docker 仓库登录成功" + else + echo "❌ Docker 仓库登录失败" + fi + + if [ "${{ steps.pull_tag_push.outcome }}" = "success" ]; then + echo "✅ 所有镜像处理成功 (成功: ${{ env.success_count }} 个)" + else + echo "⚠️ 镜像处理完成,但有部分失败" + echo " 成功: ${{ env.success_count }} 个镜像" + echo " 失败: ${{ env.fail_count }} 个镜像" + fi + + # 设置工作流状态 + if [ "${{ steps.login.outcome }}" != "success" ]; then + echo "::error::Docker 仓库登录失败,请检查 DOCKER_USERNAME 和 DOCKER_PASSWORD 配置" + exit 1 + elif [ "${{ steps.pull_tag_push.outcome }}" != "success" ]; then + echo "::warning::部分镜像处理失败,请查看上述日志了解详情" + exit 1 + else + echo "::notice::所有镜像同步成功完成!" + fi \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40ffbe0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +.vscode/ +nohup.out + diff --git a/README.md b/README.md index c81f388..bc8dbee 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,83 @@ -#### 使用方法:自己动手,Fork 本项目,绑定你自己的仓库账号或其他镜像服务账号 +# Docker 镜像拉取推送工具 -1. 在 Fork 的项目中绑定账号 - - 如果要使用自建仓库镜像服务 +一个基于 GitHub Actions 的 Docker 镜像自动同步工具,支持从任意镜像仓库拉取镜像并推送到目标仓库。 - 在 `Settings`-`Secrets and variables`-`Actions` 选择 `New repository secret` 新建 `DOCKER_USERNAME`(你的 Docker - 用户名) 和 `DOCKER_PASSWORD`(你的 Docker 密码) 两个 Secrets +## ✨ 主要特性 - - 如果需要使用其它镜像服务,例如腾讯云、阿里云等 +- 🚀 **自动触发**:修改 `images.txt` 文件自动触发镜像同步 +- 🎯 **手动控制**:支持手动触发并自定义参数 +- 🏗️ **多架构支持**:支持 amd64、arm64、arm/v7、arm/v6、386、s390x、ppc64le +- 📝 **智能解析**:自动解析镜像名称和标签,支持注释和空行 +- 📊 **详细日志**:提供清晰的执行状态和结果统计 +- 🛡️ **错误处理**:完善的错误检查和状态反馈机制 - 在 `Settings`-`Secrets and variables`-`Actions` 选择 `New repository secret` 新建 `DOCKER_USERNAME`(你的其它镜像服务用户名) - 和 `DOCKER_PASSWORD`(你的其它镜像服务密码)两个 Secrets - -2. 在 `Actions` 里选择 `拉取镜像推送` ,在右边点击 `Run workfow` +## 🚀 快速开始 -3. 在输入框中填写: - - 原镜像名称:版本 示例:`mysql/mysql-server`或者`ghcr.io/aopkcn/installers:debian`带域名 - - 同步后镜像名称:版本 示例`mysql-server:latest`或者`installers:debian` - - 仓库地址 示例:`registry.cn-chengdu.aliyuncs.com`就是仓库域名地址 - - 空间名称 示例:`aopkcn`其中`ghcr.io/aopkcn/installers:debian`aopkcn就是空间名称 - - 系统架构 自行根据架构选择,如果拉取的镜像中没有将拉取失败,默认amd64 +### 1. Fork 项目并配置密钥 -4. 最后点击 `Run workfow`等待镜像拉取推送 +1. Fork 本项目到你的 GitHub 账号 +2. 在你的项目中配置仓库密钥: + - 进入 `Settings` → `Secrets and variables` → `Actions` + - 点击 `New repository secret` 添加以下密钥: + - `DOCKER_USERNAME`:你的 Docker 仓库用户名 + - `DOCKER_PASSWORD`:你的 Docker 仓库密码 -## 注意:自建仓库请保证GitHub能够访问,否则将无法推送!!! +### 2. 配置镜像列表 + +编辑 `images.txt` 文件,添加需要同步的镜像: + +``` +# 格式:镜像名称:标签 +nginx:latest +redis:7-alpine +goharbor/harbor-core:v2.12.1 +registry.k8s.io/pause:3.9 +``` + +### 3. 触发同步 + +#### 方式一:自动触发(推荐) +- 直接修改并提交 `images.txt` 文件 +- GitHub Actions 会自动检测文件变更并触发同步 +- 使用默认配置:阿里云仓库 + amd64 架构 + +#### 方式二:手动触发 +1. 进入 `Actions` 页面 +2. 选择 `拉取镜像推送` 工作流 +3. 点击 `Run workflow` +4. 填写自定义参数: + - **镜像列表文件路径**:默认 `images.txt` + - **仓库地址**:如 `registry.cn-chengdu.aliyuncs.com` + - **空间名称**:如 `your-namespace` + - **系统架构**:选择目标架构 + +## 📋 配置说明 + +### 默认配置(自动触发时使用) +- **目标仓库**:`crpi-4a2bcohw4rh1g57m.cn-guangzhou.personal.cr.aliyuncs.com` +- **空间名称**:`xin-devops` +- **系统架构**:`amd64` +- **镜像文件**:`images.txt` + +### 镜像文件格式 +- 每行一个镜像,格式:`镜像名称:标签` +- 支持完整域名:`registry.k8s.io/kube-apiserver:v1.28.0` +- 支持简单名称:`nginx:latest` +- 以 `#` 开头的行为注释 +- 空行会被自动忽略 + +## 📊 执行结果 + +工作流会提供详细的执行信息: +- ✅ 成功同步的镜像数量 +- ❌ 失败的镜像及原因 +- 📈 完整的处理统计 +- 🔍 每个镜像的详细处理日志 + +## ⚠️ 注意事项 + +- 确保 GitHub 能够访问你的目标仓库 +- 检查仓库凭据的正确性 +- 某些镜像可能不支持指定的架构 +- 网络连接稳定性会影响同步成功率 +- 大量镜像同步可能需要较长时间 diff --git a/images.txt b/images.txt new file mode 100644 index 0000000..0ed408e --- /dev/null +++ b/images.txt @@ -0,0 +1,16 @@ +# Docker 镜像同步配置文件 +# 格式: 镜像名称:标签 +# 支持带域名的完整镜像地址,如: registry.k8s.io/kube-apiserver:v1.28.0 +# 支持简单镜像名称,如: nginx:latest +# 以 # 开头的行为注释,空行会被忽略 + +# Harbor 相关镜像 +goharbor/harbor-portal:v2.12.1 +goharbor/harbor-core:v2.12.1 + +# 示例:其他常用镜像(取消注释即可使用) +# nginx:latest +# redis:7-alpine +# mysql:8.0 +# registry.k8s.io/pause:3.9 +