大爆炸!docker加速源,搭建教程
前言
太棒啦2024年6月6日,因为脑子一歪全国docker加速源下架,官方源全部sni阻断。
记录一些加速源,以及搭建镜像源方案,
现有加速源
肯定是没有以前用国内镜像源舒服的了,都是海外节点,不知道以后有没有头大的用国内服务器搭建,如果自己用的话也可以自己用国内服务器搭建。
现有挺多是用cloudflare做节点的,但是我发现,现在cloudflare的任何IP会出现全国,突发性阻断,每次出现持续10分钟左右,不知道后续会不会平稳下来。
我的加速源
https://docker.lmirror.top
电信联通速度较快,移动一般。
G口服务器,无限请求数(还在测试中),还请不要滥用。
自建方案与教程
现有方案有如 harber,nexus,docker-registry ,nginx,cloudflare Workers反代等。
reigistry(私有仓库)搭建
搭建私有仓库可能会受到拉取官方源限制(单IP每6小时100次请求),可通过定时切换warp的IP来获得更多次数
首先创建一个compose.yaml文件,然后在当前目录运行docker compose up -d
services:
registry:
image: registry:2.8.3
ports:
- "5000:5000"
environment:
REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: inmemory
volumes:
- ./data:/var/lib/registry
如果是用1P面板,这个就是编排模板
清理镜像的话,建议直接清空registry文件夹内容,然后重启容器,走官方命令清理不干净的
接着用nginx反向代理一下127.0.0.1:5000,即可
cloudflare Workers
进入cf在左侧导航栏下面有一个workers和pages,点进去,选择创建应用程序。先确定确定创建成功后,再修改代码。
复制如下代码即可,该代码的步骤为,检测url是否v2起(v2是加速源调用),如果是则反代,如果不是则301跳转www.lmirror.top,请注意修改使用
worker.js:
export default {
async fetch(request) {
const url = new URL(request.url);
const path = url.pathname;
const originalHost = request.headers.get("host");
const registryHost = "registry-1.docker.io";
if (path.startsWith("/v2/")) {
const headers = new Headers(request.headers);
headers.set("host", registryHost);
const registryUrl = `https://${registryHost}${path}`;
const registryRequest = new Request(registryUrl, {
method: request.method,
headers: headers,
body: request.body,
// redirect: "manual",
redirect: "follow",
});
const registryResponse = await fetch(registryRequest);
console.log(registryResponse.status);
const responseHeaders = new Headers(registryResponse.headers);
responseHeaders.set("access-control-allow-origin", originalHost);
responseHeaders.set("access-control-allow-headers", "Authorization");
return new Response(registryResponse.body, {
status: registryResponse.status,
statusText: registryResponse.statusText,
headers: responseHeaders,
});
} else {
return new Response(null, {
status: 301,
headers: {
"Location": "https://www.lmirror.top/"
}
});
}
}
}
cf默认的域名是被阻断的,建议在workers设置里-触发器-添加路由。添加自己的域名。
nginx+workers反代
关于这个,我推荐不经过判断直接反代cfworkers
创建一个nginx网站,修改nginx.conf配置,注意配置自己的证书,自己的域名,自己的日志存储地址
server {
listen 443 ssl;
server_name docker.lmirror.top;
access_log /www/sites/docker.lmirror.top/log/access.log main;
error_log /www/sites/docker.lmirror.top/log/error.log;
ssl_session_timeout 24h;
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
location / {
proxy_pass https://registry-1.docker.io; # Docker Hub 的官方镜像仓库
proxy_set_header Host registry-1.docker.io;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 关闭缓存
proxy_buffering off;
# 转发认证相关的头部
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
# 对 upstream 状态码检查,实现 error_page 错误重定向
proxy_intercept_errors on;
# error_page 指令默认只检查了第一次后端返回的状态码,开启后可以跟随多次重定向。
recursive_error_pages on;
# 根据状态码执行对应操作,以下为301、302、307状态码都会触发
error_page 301 302 307 = @handle_redirect;
error_page 429 = @handle_too_many_requests;
}
#处理重定向
location @handle_redirect {
resolver 1.1.1.1;
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
# 处理429错误
location @handle_too_many_requests {
proxy_set_header Host 103.xxx.42.xxx; # 替换为其他服务器的地址
proxy_pass https://xxx.xxx.workers.dev;#你在workers的域名
proxy_set_header Host $http_host;
}
ssl_certificate /www/sites/docker.lmirror.top/ssl/fullchain.pem;
ssl_certificate_key /www/sites/docker.lmirror.top/ssl/privkey.pem;
proxy_ssl_server_name on; # 启用SNI
}
注
WARP
按需求,可设置每30分钟执行两次 warp o (开关warp切换IP),注意两次之间的执行间隔在1分钟左右
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh