这是一个go实现的,轻量级、高性能的多功能代理服务,提供 Docker 镜像加速、GitHub 文件加速、下载离线镜像、在线搜索 Docker 镜像等功能。创建此项目的初衷是目前各大镜像站都比较单一不够方便,此项目解决了集各种镜像加速于一体,单个二进制文件,所有代理都在统一的入口,方便垃圾小鸡部署。并且自托管的好处就是不依赖cf等等不稳定的网络
特性
Docker 镜像加速 - 单域名实现 Docker Hub、GHCR、Quay 等多个镜像仓库加速,流式传输优化拉取速度。
离线镜像包 - 支持下载离线镜像包,流式传输加防抖设计。
GitHub 文件加速 - 加速 GitHub Release、Raw 文件下载,支持api.github.com,脚本嵌套加速等等
AI 模型库支持 - 支持 Hugging Face 模型下载加速
智能限流 - IP 限流保护,防止滥用
仓库审计 - 强大的自定义黑名单,白名单,同时审计镜像仓库,和GitHub仓库
镜像搜索 - 在线搜索 Docker 镜像
轻量高效 - 基于 Go 语言,单二进制文件运行,资源占用低,优雅的内存清理机制。
统一配置 - 统一配置管理
从完全重构开源,一个月时间从0 star到截至目前一共收获了562 star。当然也有很多佬友的支持,目前项目已经算是比较稳定了,部署在优质线路机器上,从国内拉取代理镜像可以做到无墙一样。
关于设计思路
镜像加速
之前我使用直接用的官方registry做镜像加速,但是我发现一个问题,就是从docker pull到出现下载进度条会有很长的延迟,原因在于官方的registry每次都会去docker hub请求匿名token和寻找镜像清单,并且代理转发到客户端时会将镜像缓存到机器,我的实现跟官方registry部署方法相比的优势是,不会缓存镜像到机器中,并且优化了匿名token和镜像清单做了缓存,减少了重复认证的请求耗时,然后流式转发到客户端,所以能尽量做到最快。这里跟上游仓库的接口交互,是直接复用了google的docker库部分组件。接口很通用。
离线镜像下载
关于在线下载离线镜像的逻辑,之前用了及其笨的方法,是让先让代理机器拉取镜像,然后自动打包为tar文件,然后开放一个文件接口供用户下载,这种方法速度特别慢,后来经过摸索优化,现在是直接请求docker仓库镜像的文件层数据,然后流式转发到客户端,边下载变压缩为tar离线文件,速度相当于直接拉取镜像的速度,连打包tar文件的时间都省了。
github文件加速
关于github文件加速的逻辑是直接借鉴了网上开源的github文件加速的思路,然后重构为go实现。这里非常感谢这些大佬。
中间件
然后主入口加了一些IP限流中间件,黑名单中间件等等,防止被拉爆。前端则是直接让AI写的。直接调用后端接口。
项目总体实现没啥问题,就是我比较菜,写的不够优雅,优化空间还很大。
关于速度
我在cn2的美国机器上部署,国内机器拉192MB的nginx镜像用时15秒,如果用HK优质线路机器的话还能更快,如图:
关于性能占用和稳定性
然后我github上的demo镜像站是用的wap.ac的1H1G的2刀机器,带宽1000M。并且做了性能监控。
这个监控是随便写的一个go程序:go-utils/jiankong at main · sky22333/go-utils · GitHub
demo站镜像地址:https://demo.52013120.xyz 大家可以随便拉,就当帮我测试稳定性了
基本上每天都有人在拉镜像,而且我看日志每天都有人在拉几个G的大镜像,稳定运行了22天,无崩溃,无内存飙升,无重启。流量差不多干了2600 GB,程序很轻量,也有自动回收内存和缓存等等,占用很低,如图:


