基于 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。

前期准备:

  1. 注册一个 Cloudflare 帐号。

  2. 域名准备,如果没有域名可以在Cloudflare上注册一个,已有域名需要将域名解析托管到Cloudflare。在这里用 dockerproxy.co 作为示例
    image

  3. clone 代码到自己的仓库

步骤:

  1. 在 clone 的仓库主页点击 Deploy to Cloudflare Workers 并按照提示将代码部署到 Cloudflare Workers,我操作的时候一共建了两个worker: cloudflare-docker-proxy-staging, cloudflare-docker-proxy .
    image
    image
  2. 只需要关心 cloudflare-docker-proxy worker 即可,打开 cloudflare-docker-proxy Worker,Settings tab, Variables and Secrets 选项,修改 Name=CUSTOM_DOMAIN的value值为你的域名
    image
    2.1. 可选项,Build tab,可以将worker链接到git repo以实现自动化部署更新,这个我没测试,只是先连上了
    image
  3. 添加域名解析, 记录下来这个值:cloudflare-docker-proxy.dproxy.workers.dev
    image
    导航到绑定的域名页,添加解析记录:
    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

image
4. 添加Http Routes
在左侧菜单项选择 Workers Routes 添加以下Http Routes, Worker选择 cloudflare-docker-proxy
image

docker.dockerproxy.co/*
quay.dockerproxy.co/*
gcr.dockerproxy.co/*
k8s-gcr.dockerproxy.co/*
k8s.dockerproxy.co/*
ghcr.dockerproxy.co/*
cloudsmith.dockerproxy.co/*

image

部署完成,可以测试了,不想修改 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的子域名给禁用掉,这样谁都用不了了、
image

参考

https://www.lixueduan.com/posts/docker/12-docker-mirror/
https://segmentfault.com/a/1190000044985650
https://github.com/ciiiii/cloudflare-docker-proxy

posted @ 2024-12-11 13:17  nil  阅读(421)  评论(0编辑  收藏  举报