基于Cloudflare搭建私有Docker镜像源
周四原本不是发文的日子,主要因为两个原因:
第一个原因是总有人留言说 Docker
用不了,第二个原因是看了下上个月的阅读量,和之前比实在有点惨淡,除了文章总被人搬运外,我估计可能跟第一个原因多少还是有点关系的
看来不解决这个问题,以后就得换方向了 😂
什么是 CF-Workers-docker.io ?
CF-Workers-docker.io
是一个基于Cloudflare Workers
的Docker
镜像代理工具。它能够中转对Docker
官方镜像仓库的请求,解决一些访问限制和加速访问的问题。
什么是 Cloudflare Workers ?
Cloudflare Workers
是一种无服务器计算平台,可以在全球分布式网络上运行自定义的JavaScript
代码。每个免费账号每天有10
万次的请求额度,但每分钟只能有1000
个请求的突发速率限制。
准备
首先需要有 cloudflare
账号,这块可以自行百度,或者阅读文末的参考文档。但如果你访问不了 https://dash.cloudflare.com
,就不建议往下看了,因为还是有点折腾的
其次你要在 cloudflare
中解析域名,虽然 Cloudflare Workers
会自动生成域名,但这个默认的域名你有可能无法访问。
如果你有科学的手段,其实是不用这么折腾的
部署
左侧菜单中 Workers
和 Pages
–> 创建
创建 Worker
默认有个 Hello World
示例
- ① 可以改名,比如
docker
- ③ 是代码示例,不用管
直接点 部署
点 编辑代码
将来自:https://github.com/cmliu/CF-Workers-docker.io/blob/main/_worker.js 的代码粘贴进去
从路由表看,不仅仅是支持
docker hub
,还有我们常用到的ghcr.io
记得修改成自己的域名,如果没有的话,直接用 ② 处显示的默认域名也可以,修改完成后点 Command + s
或者 ctrl + s
保存
- 如果你使用默认的
workers.dev
域名,有可能会由于DNS
污染无法访问,所以建议你还是用自己的域名;- 仅支持
Cloudflare
上处于活动状态的域,也就是说要有在Cloudflare
解析的域名才行;
注意,文件名需要是
worker.js
,因为在wrangler.toml
中的默认设定是这样的
接下来需要点 部署
,让代码生效
如果你预览显示的是 docker hub
的主页,说明部署成功了
如果前面代码中填的是自己的域名,还需要通过 添加自定义域
绑定一下
添加完成后,用自己的域名再试试看能否加载出 docker hub
的主页
使用
假设我们前面部署的 worker
域名是 docker.laosu.tech
官方镜像路径前面加域名
正常下载镜像是👇这样的
1 | # 只有镜像名的镜像 |
现在需要把域名加在前面
1 | # 只有镜像名,还需要增加 library 充当用户名 |
有时候速度有点慢,感觉上只有几十K,一个镜像要下好几次才能完成,凑合用吧
下载完成后,镜像的名字是 docker.laosu.tech/library/alpine
而不是 alpine
,这点需要特别注意
如果想用原始的名称,和之前老苏介绍过的 dockerproxy
一样,需要多几个步骤
下面以 alpine
为例
1 | # 重命名镜像 |
这时候再看,显示的就是默认的注册表 Docker Hub
了
设置注册表
如果你习惯使用注册表,在设置之前搜索镜像应该是👇这样的
设置 –> 新增 –> 编辑注册表
- 注册表名称:这个随便你
- 注册表 URL:填入
worker
的域名https://docker.laosu.tech
现在可以搜到结果了
可以直接下载镜像,显示的注册表名称就是你前面设置的,但是实际上镜像的全称还是 docker.laosu.tech/alpine/git
参考文档
cmliu/CF-Workers-docker.io: 这个项目是一个基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求,解决一些访问限制和加速访问的问题。
地址:https://github.com/cmliu/CF-Workers-docker.ioCloudflare教程:如何注册账户、购买域名、开启免费CDN服务? - 掘金随想
地址:https://oyouoo.com/cloudflare-tutorial/