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

相关文章

编译最新的kkFileView并使用docker打包

kkFileView 是一个开源的文件预览服务,支持多种文件格式的在线预览。本文将详细介绍如何编译 kkFileView 的最新版本,并将其打包成 Docker 镜像。1. 环境准备在开始之前,...

整理一些Docker运维中常用的命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。以下是一些在 Docker 运维中常...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件