2024最新基于Cloudflare Workers搭建Docker Hub镜像加速服务

本篇教程将带你通过 Cloudflare 的 Workers 服务创建一个简单的 Docker 镜像代理。通过这个代理,你可以加速从 Docker Hub 拉取镜像,特别是在国内环境下显著提升下载速度。

前期准备

  1. 注册 Cloudflare 账号:如果还没有 Cloudflare 账号,先前往 Cloudflare官网 注册一个。
  2. 关于域名:虽然你可以自己绑定一级域名,但即使没有,Cloudflare 也会免费提供一个四级域名。不过这个四级域名可能有些难记,但足够使用。
  3. Worker 请求限制:免费账号每个月可以免费使用 10 万次请求,且每分钟最多可处理 1000 次请求。

一、创建 Worker

  1. 登录 Cloudflare 仪表盘
    登录到 Cloudflare 后,进入仪表盘。你会看到下方的界面:

    仪表盘截图

  2. 进入 Workers 和 Pages 页面
    在左侧菜单中,点击 “Workers 和 Pages”,进入相关页面。
  3. 创建 Worker
    在这个页面点击 “创建应用程序”,然后选择“创建 Worker”。

    创建 Worker

  4. 命名你的 Worker
    给你的 Worker 起一个名字,Cloudflare 会基于你的用户名自动生成一个免费的四级域名,供 Worker 使用。

    命名 Worker

  5. 编辑代码
    点击创建好的 Worker 后,进入编辑页面。Cloudflare 会为你加载一个基于 Web 的 IDE,加载可能稍慢,请耐心等待。
    编辑代码
    加载完成后界面如下:
    编辑代码界面

    加载完成后,将默认代码替换为以下代码:

    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: "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 {
                let HTML = 'https://{{host}}';
                return new Response(HTML.replace(/{{host}}/g, originalHost), {
                    status: 200,
                    headers: {
                        "content-type": "text/html"
                    }
                });
            }
        }
    }
  6. 保存代码
    编辑完成后,按下 Ctrl + S 保存代码。
  7. 部署 Worker
    点击右上角的 “部署” 按钮,成功后会显示绿色的提示框,说明你的 Worker 已成功部署。

    部署 Worker

  8. 查看部署信息
    点击左上角的返回按钮 <-d,返回页面即可查看 Worker 的部署信息。

    查看部署信息

    查看部署信息


二、配置域名

  1. 绑定自定义域名
    如果你已经在 Cloudflare 托管了自己的域名,可以在设置中绑定它。Cloudflare 会自动为你创建相关的解析记录。

    配置域名

  2. 禁用四级域名
    如果绑定了自定义域名,你可以选择禁用 Cloudflare 提供的四级域名,只使用自己的域名访问。

三、配置 Docker

现在 Worker 已经成功部署,可以配置 Docker 来使用这个代理。

  1. 修改 Docker 配置
    在你的服务器上,找到并编辑 Docker 的配置文件 /etc/docker/daemon.json,添加以下内容:

    {
        "registry-mirrors": ["https://<你的四级域名或自定义域名>"]
    }

    例如:

    {
        "registry-mirrors": ["https://d.izenvip.workers.dev"]
    }
  2. 拉取镜像
    你可以通过以下命令拉取 Docker 镜像,使用 Cloudflare Worker 提供的代理来加速:

    docker pull d.izenvip.workers.dev/library/alpine:latest

标签: 运维, Docker

相关文章

在1Panel中解决Docker内PHP网络请求超时问题

在1Panel管理面板中,我们可能会遇到在使用Docker运行的PHP环境中发起网络请求时出现的超时问题。最近给博客写了一个远程请求插件,之前还是正常,这两天突然请求500错误了...问题分析当...

surge中配置wireguard客户端连接

surge还是挺好用的,不过最近研究内网穿透,想试试wireguard的设置,然后折腾了一下,虽然秒被封,但是至少这个配置是成功的,可以参考在surge中新建一个配置,内容按如下做调整即可[Pr...

macOS下安装与配置网络抓包工具Charles入门教程

charles抓包工具是基于HTTP请求中间人代理,通过和服务端、客户端建立通信将客户端的请求数据发送服务器,并将响应数据传输给客户端,实现抓包记录,最最最...我想推荐的原因是...它很简洁....

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件