基于 Cloudflare Workers 和 cloudflare-docker-proxy 搭建镜像加速服务
Docker 镜像好用了一段时间之后又不行了,一直刷到文章说 Cloudflare 可以加速,没实际用过,这次不得不用上了(希望别被滥用导致被封),搜了一下,GitHub 上的项目 https://github.com/ciiiii/cloudflare-docker-proxy
还很符合对我我对加速服务的需求。主要是用的 docker 和 github 的 image。
这个是搜到的文章 https://www.lixueduan.com/posts/docker/12-docker-mirror/ ,但是文章略早,我看GitHub上的代码又有了改动,比原来好设置多了,最新一次改动 https://github.com/ciiiii/cloudflare-docker-proxy/commit/703fae4e6324bab4e0abf9ea5068f997c99956fb
把Domain改成了变量。不需要改源代码,可以直接部署到Cloudflare。
我用的是第二种方法,加速了repo中支持的docker服务:docker,quay,gcr,k8s,ghcr,cloudsmith
建议clone代码到自己的git仓库,把然后将该仓库链接到Cloudflare。
前期准备:
-
注册一个 Cloudflare 帐号。
-
域名准备,如果没有域名可以在Cloudflare上注册一个,已有域名需要将域名解析托管到Cloudflare。在这里用
dockerproxy.co
作为示例
-
clone 代码到自己的仓库
步骤:
- 在 clone 的仓库主页点击
Deploy to Cloudflare Workers
并按照提示将代码部署到 Cloudflare Workers,我操作的时候一共建了两个worker:cloudflare-docker-proxy-staging
,cloudflare-docker-proxy
.
- 只需要关心
cloudflare-docker-proxy
worker 即可,打开cloudflare-docker-proxy
Worker,Settings
tab,Variables and Secrets
选项,修改 Name=CUSTOM_DOMAIN的value值为你的域名
2.1. 可选项,Build tab,可以将worker链接到git repo以实现自动化部署更新,这个我没测试,只是先连上了
- 添加域名解析, 记录下来这个值:
cloudflare-docker-proxy.dproxy.workers.dev
导航到绑定的域名页,添加解析记录:
Type=CName
Name=docker/gcr/ghcr/k8s/k8s-gcr/quay/cloudsmith
Target=cloudflare-docker-proxy.dproxy.workers.dev
其它项dou8保持默认值,保存。
git repo说的是添加A
记录解析到192.0.2.1
,也可以用,想折腾了也可以试一下。
因为域名其它地址有用,所以固定下来域名解析docker images
docker.dockerproxy.co
quay.dockerproxy.co
gcr.dockerproxy.co
k8s-gcr.dockerproxy.co
k8s.dockerproxy.co
ghcr.dockerproxy.co
cloudsmith.dockerproxy.co
4. 添加Http Routes
在左侧菜单项选择 Workers Routes
添加以下Http Routes, Worker选择 cloudflare-docker-proxy
docker.dockerproxy.co/*
quay.dockerproxy.co/*
gcr.dockerproxy.co/*
k8s-gcr.dockerproxy.co/*
k8s.dockerproxy.co/*
ghcr.dockerproxy.co/*
cloudsmith.dockerproxy.co/*
部署完成,可以测试了,不想修改 daemon.json
文件,通过加速地址拉取镜像以后将tag改为原来的名字
拉取nginx的命令:
# docker pull nginx:1.27.3-alpine
docker pull docker.dockerproxy.co/nginx:1.27.3-alpine # 拉取 Docker 官方镜像
修改tag为原来的名字
docker tag docker.dockerproxy.co/nginx:1.27.3-alpine nginx:1.27.3-alpine
项目里就会有两个 docker name 有同一个id
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.dockerproxy.co/nginx 1.27.3-alpine 91ca84b4f577 2 weeks ago 52.5MB
nginx 1.27.3-alpine 91ca84b4f577 2 weeks ago 52.5MB
ghcr的命令也是一样的,比如说拉取frp. https://github.com/fatedier/frp/pkgs/container/frps
docker pull ghcr.io/fatedier/frps:v0.61.0
改为
docker pull ghcr.dockerproxy.co/fatedier/frps:v0.61.0
修改tag
docker tag ghcr.dockerproxy.co/fatedier/frps:v0.61.0 ghcr.io/fatedier/frps:v0.61.0
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.dockerproxy.co/fatedier/frps v0.61.0 47bb77e97544 7 weeks ago 26.5MB
ghcr.io/fatedier/frps v0.61.0 47bb77e97544 7 weeks ago 26.5MB
使用image时和原来一样,没有任何改变。
没有测试修改daemon.json文件的情况。
因为没有增加验证,所以知道url的都可以使用,会导致免费次数用尽,或者收费的也会被滥用,如果想暂时停用,可以把Cloudflare Worker的子域名给禁用掉,这样谁都用不了了、
参考
https://www.lixueduan.com/posts/docker/12-docker-mirror/
https://segmentfault.com/a/1190000044985650
https://github.com/ciiiii/cloudflare-docker-proxy