开源地址: https://github.com/jqknono/esa-registry-proxy
ESA Docker Registry Proxy
这是一个基于 Alibaba ESA (Edge Security Acceleration) 的 Docker Registry 转发代理,为中国大陆用户提供更快的 Docker 镜像下载服务,并实现镜像白名单功能以增强安全性。
功能特性
- Docker Registry 代理: 转发 Docker Hub 请求,提升中国大陆用户下载速度镜像白名单: 限制只能下载指定的镜像,提高安全性支持多种匹配模式: 支持精确匹配和前缀匹配智能缓存机制: 优先使用缓存数据,减少重复请求,提高响应速度
快速开始
前提条件
- Node.js 16+npm 或 yarnAlibaba ESA 账号及 AccessKey ID 和 Secret
安装部署
克隆项目:
git clone https://github.com/jqknono/esa-registry-proxy
部署到 Alibaba ESA
方法一:使用 ESA CLI (推荐)
安装 ESA CLI:
npm install esa-cli -g
登录 ESA:
esa login
初始化项目:
esa init
提交代码:
esa commit
部署函数:
esa deploy
绑定域名:
esa domain add registry.jqknono.com
方法二:手动部署
请参考 DEPLOYMENT.md 文件获取详细的手动部署说明。
白名单功能详解
白名单功能是本项目的核心安全特性,可以限制允许通过代理拉取的 Docker 镜像,防止恶意使用。
白名单配置格式
白名单配置为逗号分隔的字符串,每个字符串代表一个允许下载的镜像名称模式:
WHITELIST=library/nginx,library/redis,library/*
支持的匹配模式
- 精确匹配: 如
library/nginx
,只允许下载完全匹配的镜像前缀匹配: 如 library/*
,允许下载所有 library
组织的镜像配置示例
# 只允许官方 nginx 和 redis 镜像WHITELIST=library/nginx,library/redis# 允许所有官方镜像WHITELIST=library/*# 允许特定组织的所有镜像WHITELIST=jqknono/*
使用方式
直接使用
docker pull registry.jqknono.com/library/nginx
配置 Docker 客户端
在 Docker 配置中添加镜像仓库:
{ "registry-mirrors": ["https://registry.jqknono.com"]}
技术实现
- 利用 Alibaba ESA 的边缘网络加速镜像拉取支持 Docker Registry v2 API实现镜像白名单安全控制利用 ESA Cache API 实现智能缓存,优先使用缓存数据,缓存时间为服务允许的最大值(一年)
注意事项
- 此项目主要用于个人开发环境或小型团队使用大规模生产环境建议使用专业的镜像仓库服务请确保您的 Alibaba ESA 账户有足够的配额