巧解 Docker 镜像拉取难题:无需梯子和服务器,拉取数量无限制

在国内使用 Docker 时,常常面临无法直接访问官方镜像仓库的问题,这给学习和工作带来诸多不便。目前常见的解决方法,要么稳定性差,要么需要服务器、梯子,或者存在拉取数量限制。本文将介绍一种全新的 Docker 镜像拉取方案,该方案具有稳定性高、无经济开销、无拉取限制等优点,只需一次初始化配置,就能在任意目录通过简单命令实现镜像拉取。

现有方法分析

一、更换 Docker 源

方案描述:修改 Docker 配置文件daemon.json,添加公开镜像源后直接拉取

是否需要海外服务器:×

是否需要梯子:×

稳定性:极差(需频繁更换源)

限额:不限

二、使用公开镜像站 方案描述:使用类似docker.aityp.com/的镜像站,手动查找更换... tag 后再拉取

是否需要海外服务器:×

是否需要梯子:×

稳定性:中

限额:不限

三、配置 proxychains 代理拉取 方案描述:配置代理后,使用proxychains docker pull xxx拉取镜像

是否需要海外服务器:×

是否需要梯子:√

稳定性:高

限额:10/h

四、自建 Docker 代理服务

方案描述:使用类似 docxy 等方案,在服务器自建 Docker 代理,通过换源即可使用

是否需要海外服务器:√

是否需要梯子:×

稳定性:高

限额:10/h

现有方法各有不足:更换 Docker 源虽好用但稳定性差;公开镜像站便捷性不足,很多镜像难以找到;配置 proxychains 代理拉取需要梯子且有限额;自建代理服务则需要服务器部署,同样存在数量限制。

新方案介绍

方案原理

该方案借助 GitHub 工作流和阿里云个人镜像仓库来实现镜像拉取,整体架构如下:

  1. 将希望下载的镜像名写入 images.txt。
  2. 将变更提交到 Git 仓库。
  3. 触发 GitHub 工作流,工作流中定义了执行的脚本。
  4. 工作流自动执行同步脚本,从 Docker 官方镜像站 pull 镜像,并上传到阿里云个人镜像仓库中。
  5. 用户再从阿里云个人镜像站拉取镜像。
  6. 将拉取到的镜像重命名为目标镜像 tag。

此方案具有诸多优势:无需梯子,GitHub 和阿里云个人镜像仓库均可直接访问;无需服务器,利用 GitHub 工作流的容器环境实现镜像同步;免费,阿里云个人镜像站可免费创建,总限额 300 个,超量可删除后重新创建;无拉取限制,经测试未发现官方镜像站每小时 10 个的拉取限制;稳定性高,部署成功后可稳定使用;使用便捷,虽原理步骤看似复杂,但已通过脚本封装,配置完成后仅需类似原生命令的 docker_pull 镜像 tag 即可拉取。

方案配置

环境依赖

  • 安装 git 并配置账号密码或密钥(推荐使用密钥)。
  • 拥有阿里云账号并完成实名注册(若没有,可前往阿里云官方网站注册)。
  • 安装 Docker。

阿里云个人镜像仓库申请

  1. 开通容器镜像服务:访问cr.console.aliyun.com/cn-shanghai...
  2. 设置镜像仓库登录密码:服务开通后,点击设置 Registry 登录密码按钮,或在左侧导航栏访问凭证处设置,记住设置的密码。
  3. 创建命名空间:点击左侧导航栏命名空间,点击创建命名空间按钮,输入独特名称后确定,记住该名称。
  4. 记录登录凭证:点击左侧导航栏登录凭证,记下仓库地址。

Git 仓库配置

  1. fork 仓库:将开源仓库github.com/you8023/doc... fork 到自己的 Git 账号(若希望镜像 tag 保密,需自行创建 private 权限仓库,克隆后上传;若想分享给好友,可在设置的 Collaborators 处邀请)。
  2. 配置仓库全局变量:依次点击 Settings -> Secrets and Security -> Actions,点击 New respository secret 按钮,添加 DOCKER_USER(阿里云账户)、DOCKER_PWD(阿里云镜像仓库密码)、DOCKER_REGISTRY(仓库地址)、DOCKER_NS(命名空间名称)这 4 个全局变量。
  3. 克隆仓库:复制自己 fork 的仓库地址,使用 git clone xxx 克隆到本地。

脚本配置

  1. 复制本地仓库中的 cmd/conf.yaml.default 文件并命名为 cmd/conf.yaml。
  2. 编辑 conf.yaml,配置 registry(阿里云个人镜像仓库地址)、namespace(命名空间名称)、images_dir(Git 仓库路径)、max_retries(拉取镜像重试次数,默认为 60)、retry_delay(拉取镜像尝试间隔,秒,默认为 1)、first_delay(提交镜像 tag 后等待开始尝试拉取的时间,秒,默认为 20)。
  3. 打开终端,登录阿里云镜像仓库:docker login <阿里云个人镜像仓库地址>。
  4. 添加脚本目录到环境变量:
    • Windows 系统:右键此电脑选择属性,点击高级系统设置,点击环境变量,找到 Path 变量编辑,新建添加 cmd 目录路径。
    • Linux 系统:对 docker_pull 脚本添加执行权限,编辑~/.bashrc,添加 export PATH=$PATH:/home/dubito/git/docker_images_sync/cmd(路径替换为自己的),执行 source ~/.bashrc 使配置生效。
    • Mac 系统:参考 Linux 系统配置(目前暂未测试,欢迎反馈)。

方案使用

配置完成后,可在任意目录使用命令拉取镜像:

  • 拉取单个镜像:docker_pull mysql:8.0.1。
  • 拉取多个镜像:docker_pull mysql:8.0.1 mcp/elasticsearch:latest bitnami/redis:8.0.2-debian-12-r3。

若拉取失败,可在 GitHub 查看工作流状态和日志,以便排查问题。

相关推荐
一枚ABAPer19 分钟前
SAP ABAP 如何读取FTP读取CSV文件到内表
后端
苏三的开发日记23 分钟前
grafana里面怎么添加Prometheus数据源监控MySQL
后端
找不到对象就NEW一个25 分钟前
wechatapi,微信二次开发-连载篇(二)通讯录模块
后端·微信
Y***985137 分钟前
【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元
前端·spring boot·后端
q***33371 小时前
SpringMVC新版本踩坑[已解决]
android·前端·后端
武子康1 小时前
大数据-166 Apache Kylin 1.6 Streaming Cubing 实战:Kafka 到分钟级 OLAP
大数据·后端·apache kylin
回家路上绕了弯1 小时前
彻底解决超卖问题:从单体到分布式的全场景技术方案
分布式·后端
8***29311 小时前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
HelloGitHub1 小时前
《HelloGitHub》第 116 期
开源·github
IT_陈寒2 小时前
Python高手都在用的5个隐藏技巧,让你的代码效率提升50%
前端·人工智能·后端