如何基于Cloudflare Workers和cloudflare-docker-proxy搭建镜像加速服务

本文将介绍如何使用Cloudflare Workers和cloudflare-docker-proxy搭建dockerhub、gcr、quay等镜像加速服务。

最近,部分主流镜像站由于各种情况而关闭,为了能够正常使用,我们建议自己搭建一个加速器。

在此之前,我们已经部署好了一个加速器,可以直接使用。具体使用方法请点击
https://docker.lixd.xyz
或者查看使用说明。

准备工作

1)首先需要注册一个Cloudflare账号。

2)在Cloudflare账号下需要添加一个域名。我们推荐在万网注册一个域名,然后将其转移到Cloudflare。 top、xyz后缀的域名应该都是首年7块。

部署流程

修改配置

首先将https://github.com/ciiiii/cloudflare-docker-proxy仓库fork到自己的账号下。然后修改

src/index.js

中的内容。修改后的内容如下:

const routes = {
  "docker.mydomain.com": "https://registry-1.docker.io",
  "quay.mydomain.com": "https://quay.io",
  "gcr.mydomain.com": "https://gcr.io",
  "k8s-gcr.mydomain.com": "https://k8s.gcr.io",
  "k8s.mydomain.com": "https://registry.k8s.io",
  "ghcr.mydomain.com": "https://ghcr.io",
  "cloudsmith.mydomain.com": "https://docker.cloudsmith.io",
};

其中mydomain.com就是你的域名,比如作者使用的是lixd.xyz。

再修改

wrangler.toml

,同样替换域名。

[env.production]
name = "cloudflare-docker-proxy"
routes = [
  { pattern = "docker.mydomain.com", custom_domain = true },
  { pattern = "quay.mydomain.com", custom_domain = true },
  { pattern = "gcr.mydomain.com", custom_domain = true },
  { pattern = "k8s-gcr.mydomain.com", custom_domain = true },
  { pattern = "k8s.mydomain.com", custom_domain = true },
  { pattern = "ghcr.mydomain.com", custom_domain = true },
  { pattern = "cloudsmith.mydomain.com", custom_domain = true },
]

[env.production.vars]
MODE = "production"
TARGET_UPSTREAM = ""

[env.staging]
name = "cloudflare-docker-proxy-staging"
route = { pattern = "docker-staging.mydomain.com", custom_domain = true }

同样的mydomain.com就是你的域名。

最后修改README.md中的

图标对应的Github仓库地址为你fork后的仓库地址,比如
https://deploy.workers.cloudflare.com/?url=https://github.com/lixd/cloudflare-docker-proxy

这三个修改都完成后,提交代码。

帮助文档

为了便于使用,可以在访问根目录时返回一个帮助页面。

help.html

新建一个

help.html

文件,内容如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
   ...
   ...(此处省略)
   ...
</head>
<body>
   ...
   ...(此处省略)
   ...
</body>
</html>

增加路由



scr/index.js

中增加一条路由,访问根目录时就返回这个帮助页面。

import DOCS from './help.html'

// return docs
if (url.pathname === "/") {
  return new Response(DOCS, {
    status: 200,
    headers: {
      "content-type": "text/html"
    }
  });
}

完整内容见:
https://github.com/lixd/cloudflare-docker-proxy

点击部署

然后在Github界面点击这个

图标进行部署,会自动跳转到Cloudflare,按步骤操作即可。最终会在Github仓库中创建一个Github Action来将该仓库部署到Cloudflare Workers。

就像这样:

等待部署完成

可以到Github查看Action执行进度

执行完成后,切换到Cloudflare Dashboard,不出意外的话就可以看到刚创建的Worker了。

切换到Setting,等待SSL证书签发完成即可

使用说明

部署完成后,访问
https://docker.lixd.xyz
就可以看到使用说明了。

例如:
https://docker.lixd.xyz

为了加速Docker镜像拉取,你可以使用以下命令设置registry mirror:

sudo tee /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": ["https://docker.lixd.xyz"]
}
EOF
# 配置完后需要重启Docker服务
sudo systemctl restart docker

使用该代理从不同的镜像仓库拉取镜像,请参考以下命令:

# docker pull nginx:latest
docker pull docker.lixd.xyz/library/nginx:latest  # 拉取Docker官方镜像
...
...(此处省略)
...

为了避免Worker用量耗尽,你可以手动pull镜像然后re-tag之后push至本地镜像仓库。

FAQ


Build & Deploy The process ‘/usr/local/bin/yarn’ failed with exit code 1 +1

  ✘ [ERROR] A request to the Cloudflare API (/accounts/***/workers/scripts/cloudflare-docker-proxy/domains/records) failed.
  
    workers.api.error.origin_conflict_existing_dns_record [code: 100117]

如果提前添加了DNS解析则出现这个错误,部署之后会自动添加解析记录,因此部署前不要手动添加记录。

如果出现该问题,可以将DNS解析记录删除后再试。

如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。

搜索公众号【

探索云原生

】即可订阅

参考

cloudflare-docker-proxy

白嫖Cloudflare Workers搭建Docker Hub镜像加速服务|

又发掘一个CF的新用法,利用Worker构建Docker Registry Mirror

Docker镜像库国内加速的几种方法

未经允许不得转载:大白鲨游戏网 » 如何基于Cloudflare Workers和cloudflare-docker-proxy搭建镜像加速服务