国内 Docker 镜像访问加速:使用 CloudFlare Worker 搭建个人加速器

-
-
2024-06-19

Docker 镜像的快速访问对于开发者来说至关重要,但国内用户常常因为网络限制而面临访问 Docker 官方镜像仓库速度慢的问题。CloudFlare Worker 作为一个免费的全球 CDN 服务,提供了一种有效的解决方案。本文将详细介绍如何利用 CloudFlare Worker 搭建 Docker 加速镜像服务。

什么是 CloudFlare Worker?

CloudFlare Worker 是一种在 CloudFlare 边缘网络运行的轻量级 JavaScript 运行环境,它能够处理 HTTP 请求,实现自定义的网络逻辑,并且完全免费。

搭建 Docker 加速镜像服务的步骤

步骤 1:创建 CloudFlare Worker

  1. 登录 CloudFlare 账户。
  2. 在 CloudFlare 面板中创建一个新的 Worker。

步骤 2:编写 Worker 脚本

编写 worker.js 文件,实现 Docker 镜像的请求代理。以下是 worker.js 的示例代码:

import HTML from './docker.html';

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);

            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(HTML.replace(/{{host}}/g, originalHost), {
                status: 200,
                headers: {
                "content-type": "text/html"
                }
            });
        }
    }
}

步骤 3:创建 HTML 页面

创建 docker.html 文件,为用户提供使用说明和配置示例。以下是 docker.html 的示例代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <!-- 省略 head 中的 meta 和 style 标签 -->
    <title>Docker Mirror Usage</title>
</head>
<body>
    <div class="header">
        <h1>Docker Mirror Usage</h1>
    </div>
    <div class="container">
        <div class="content">
            <p>镜像加速说明</p>
            <p>全局方式:为了加速全部镜像拉取,你可以使用以下命令设置 registry mirror:</p>
            <pre>
sudo tee /etc/docker/daemon.json &lt;&lt;EOF
{
    "registry-mirrors": ["https://{{host}}"]
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
            </pre>
            <p>临时方式:为了加速拉取某个镜像,可以使用以下命令:</p>
            <pre>
docker pull {{host}}/命名空间/镜像名称:标签名称
例如:
docker pull {{host}}/library/alpine:latest # 拉取 library 镜像
docker pull {{host}}/coredns/coredns:latest # 拉取 coredns 镜像
            </pre>
        </div>
    </div>
    <div class="footer">
        <p>Powered by <a href="https://blog.cqx1.xyz">Xiao1</a></p>
    </div>
</body>
</html>

步骤 4:部署 Worker

在 CloudFlare 面板中部署编写好的 Worker 脚本。

步骤 5:配置自定义域名

为了更好的访问体验,配置自定义域名以替代默认的 workers.dev 域名。

结语

通过以上步骤,你可以成功搭建一个 Docker 加速镜像服务,有效提升国内用户访问 Docker 官方镜像仓库的速度。CloudFlare Worker 的使用不仅免费,而且简单易操作,是技术爱好者和开发者的理想选择。

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录