资源整理 | 国内可用镜像仓库代理

noteId
4
date
Aug 1, 2024
slug
china-mirror-proxy
status
Published
tags
科技
容器
Docker
summary
举例国内可以的使用的镜像代理
type
Post

起因

今日购入一台阿里云 ECS,在折腾的时候发现部分国外的镜像拉取速度过慢,并且阿里云 ACR 镜像加速下载的镜像都不是最新的,寻找了些一些解决方案和国内可用的镜像代理服务,在这里做个记录。
由于不可抗力,多数镜像代理服务平台已经下线代理,于 2024/10/12 对此文进行更新,下表为收集的加速器列表,不定时更新,有失效可能。
镜像加速器列表
供应商
加速器地址
官网
备注
https://docker.m.daocloud.io
仅限境内机器使用,白名单模式,不在名单的镜像需要提交申请。
https://docker.1panel.live https://dockerproxy.1panel.live https://proxy.1panel.live
仅限境内机器使用,可能会有流量限制。
💡
我搜索到是很多人在使用 Cloudflare Wokers 自建镜像代理,对于此种方式我不予评价,有兴趣的可以自行搜索相关教程。
目前提供镜像加速服务的供应商较少,由于我使用的是阿里云 ECS,因此为了方便,我通过 GitHub Action 定时同步镜像到阿里云 ACR 来使用 Docker,本文的目的就是想跟大家分享一下我在同步镜像的经验,希望可以给大家提供一个参考。

使用 GitHub Action 定时同步镜像到阿里云 ACR

本文主要有以下几个部分:
  • 如何在 ACR 中创建镜像仓库命名空间和仓库
  • 如何获取 ACR 的授权信息
  • 如何配置 GitHub Actions 同步镜像
事不宜迟,那让我们马上开始吧!

Step 1. 在 ACR 中创建镜像仓库命名空间和仓库

搭建第一步是在阿里云容器镜像服务(Aliyun Container Registry)中创建命名空间(namespace)和镜像仓库(repository)。在开始之前,我想先解释一下这个镜像服务地址、命名空间、以及仓库名字的含义。因为明白它们的含义有助于理解下文,理解现在做到哪一步。在下载 Docker image 的时候,一个仓库的全称可能长成下面这样:
也就是:
具体来说,
  • REGISTRY 是阿里云容器镜像服务地址,其中的 cn-shenzhen 是区域的地址,你只需要替换到离你最近的区域即可,可用的区域列表请参考地域和可用区列表中的地域ID
  • NAMESPACE 是镜像的命名空间,管理该命名空间下的仓库集合,包括仓库权限和仓库属性,这里你随意设置一个自己记得住的字符串即可。
  • REPOSITORY 是镜像仓库的名称,尽量输入易于辨别的字符串,比如我同步 vaultwarden/server 镜像到ACR就是 registry.cn-shenzhen.aliyuncs.com/qinyangwang/vaultwarden
了解了镜像名称之后,我们开始创建镜像仓库实例:
  1. 登录容器镜像服务控制台
    1. 💡
      若您是首次登录容器镜像服务控制台,您需要设置Registry登录密码,以便镜像的上传和下载。
      • 使用账号登录,需要设置Registry登录密码。
  1. 在顶部菜单栏,选择所需地域。
    1. notion image
  1. 在左侧导航栏,选择实例列表
    1. notion image
  1. 实例列表页面,单击个人版区域任意位置。
    1. notion image
  1. 提示对话框单击创建个人版
  1. 在个人版实例管理页面选择仓库管理 > 命名空间
    1. notion image
  1. 命名空间页面单击创建命名空间
    1. notion image
  1. 创建命名空间对话框中设置命名空间名称,单击确定
 

Step 2. 获取 ACR 的授权信息

获取镜像仓库的登录名
  • 如果您使用的是阿里云账号,阿里云账号就是您的镜像仓库登录名。
  • 如果您使用的是RAM用户,去掉RAM用户账号aliyundoc.com后的名称就是您的镜像仓库登录名。例如您的RAM用户为28768383240243****@aliyundoc.com,则您的镜像仓库登录名为28768383240243****。
设置镜像仓库登录密码
  1. 登录容器镜像服务控制台
  1. 单击设置Registry登录密码
    1. 💡
      如果您忘记设置的Registry登录密码,您可以在个人实例 > 仓库管理 > 访问凭证来重置密码。
      notion image
  1. 设置Registry登录密码对话框中输入密码确认密码,单击确定
    1. notion image

Step 3. 配置 GitHub Actions 同步镜像

配置 GitHub Actions 可以参考我的 GitHub 仓库
  1. 准备 auth.yamlimages.yamlimage-sync.yml 这 3 个文件,它们分别是镜像仓库认证信息,源和目标镜像映射关系,Action 工作流模板,按下面的路径存储:
    1. 除了 image-sync.yml 的路径是固定的,其他两个路径可以自定义,只需要在 image-sync.yml 修改参数即可:
      1. 需要在 auth.yaml 中输入目标 registry 的鉴权信息(如果源 registry 也需要鉴权,则源 registry 的鉴权信息也需要输入),最佳实践是将鉴权信息输入到 Secrets 中,然后在 image-sync.yml 中作为 env 使用,最后在 auth.yaml 中以 ${XXX} 的形式引用:
        1. 在GitHub 仓库的 Settings 中点击 Secrets and variables > Actions,然后在 Repository secrets 点击 New repository secret 来添加鉴权信息:
          notion image
      1. 镜像同步配置文件定义了所有的镜像同步规则。每条规则都是一个键值对,键表示“源镜像地址”,值表示“目标镜像地址”。源/目标镜像地址与我们在 docker pull/push 命令中使用的 url 基本相同,但在“tags 和 digest”部分还是有区别的:
          • 源镜像url和目标镜像url都不能为空。
          • 如果源镜像url不包含tags或digest,则源仓库的所有tags都会被同步。
          • 源镜像url可以有多个tags,tags之间用逗号隔开,只有指定的tags才会被同步。
          • 源镜像url最多只能有一个digest,目标镜像url只能没有digest或者同时有相同的digest。
          • 源镜像url的“tags”部分可以是一个正则表达式,需要有一个额外的前缀和后缀字符串/。源仓库中所有符合正则表达式的标签都会被同步,不支持多个正则表达式。
          • 如果目标镜像url没有摘要或标签,则表示源镜像在同步后会保留相同的标签或摘要。
          • 目标镜像url可以有多个标签,标签数量必须与源镜像url中的标签数量相同,则所有源镜像的标签都会更改为新标签(从左到右对应)。
          • “目标镜像url”也可以是一个数组,每个数组都遵循上述规则。
        1. 我在 image-sync.yml 中配置了两个触发条件,你可以参考 GitHub 文档按需修改:
            • 每日0点(UTC时间)
            • main 分支有新的提交
        2. 配置完成之后,此 Action 会每日定时同步镜像到 ACR 中,我目前使用的镜像较少没有什么特殊的问题,如果你有什么使用问题请在 QinYangWang/actions 这个仓库下提交 issues,我会尽量解答或修复相关问题。
       

      © QinYang Wang 2021 - 2024