巧解 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 查看工作流状态和日志,以便排查问题。

相关推荐
tan180°8 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
wuk9988 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
优创学社29 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术9 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理9 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
ai小鬼头10 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
简佐义的博客10 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
天天扭码10 小时前
从图片到语音:我是如何用两大模型API打造沉浸式英语学习工具的
前端·人工智能·github
Code blocks10 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins