利用Cloudflare workers拉取dockerhub镜像
关于cloudflare workers
在 Cloudflare Workers 部署一个 Worker 时,它会在30秒之内部署到 Cloudflare 的整个边缘网络,全世界95个国家/200个城市节点。域中的每个请求都会由离用户更近地点的 Worker 来处理,基于此来实现代码的 “随处运行”。
借助 Cloudflare Workers,开发人员能够在 Cloudflare 的全球云网络上部署无服务器的 JavaScript 应用程序,应用程序能够在这个网络中无缝扩展,更加接近最终用户。Workers 基于 Service Workers API 构建,可为向应用程序发出的每次 HTTP(S) 请求接收事件。然后,Workers 运行应用程序逻辑,并可向 Cloudflare Cache、Cloudflare Workers KV 或应用程序原始服务器发出后续请求,以将数据返回给用户。
- 计费相关
免费版每天有 10 万次免费请求,并且有每分钟1000次请求的限制,每个请求最多占用 10 毫秒 CPU 时间。超过限制后,会返回错误。对于大多数人来说已经足够用了。
- 网络相关
如果说你访问workers.dev的域名也是非常慢,或者访问不到的时候,可以试试 hosts 绑定, 大几率你能访问到。更多内容请见 官方文档
https://developers.cloudflare.com/workers/
cloudflare中添加自己的域名
- 注册cloudflare账号,过程不赘述
https://dash.cloudflare.com/login
- 注册一个域名,可以阿里云、华为云、腾讯云等购买,便宜点的8块钱首年
阿里云:https://wanwang.aliyun.com/domain
华为云:https://www.huaweicloud.com/product/domain/search.html
腾讯云:https://buy.cloud.tencent.com/domain
- 登录cloudflare,添加站点
点击右上角添加站点,输入自己需要添加的域名:
选择免费计划:
如果有dns记录可以此时添加,点击继续:
点击继续,会提示需要修改dns服务器,此时需要去域名对应的注册商修改域名dns服务器:
我这里的域名是阿里云的,就去阿里云域名控制台找到修改dns服务器,填入刚刚cf名称服务器提交即可,其他服务商修改方法大同小异,一般十几分钟就可以生效,此时就可以使用cloudflare来管理在别处购买的域名:
此时回到cloudflare,点击继续:
激活了会发邮件:
cloudflare中创建worker
- 激活之后,进入Workers 和 Pages,再点击概述,创建works。
验证完进入页面,点击创建worker,输入项目名称,然后在下面会有一行小字:您的 Worker 将被部署到:xxxxx,这个是cf自动分配给你的域名,通过这个就可以访问这个项目,有童鞋就会想那为啥还要自己准备域名,因为很简单,cf分配的那个域名目前打不开,只能绑定自己的域名。输入完名称后点击保存,会出现默认的worker.js,这个不用管,点击完成就行.
点击保存进入预览页面:
点击完成后会出现初始界面,点击编辑代码:
先删掉默认的代码,然后把以下代码复制到里面,并替换workers_url为自己的域名,再点击部署:
1 |
|
cloudflare中绑定自己的域名并配置路由
cf workers默认使用的是自动分配的域名,这个目前国内很难访问到,所以还需要绑定自己的域名。
- 进入项目详细-设置里面,选择触发器,点击添加路由。路由就填写对应的子(主)域名,例如主域名是“testmirror.com”,想要通过“dockerhub.testmirror.com”拉取镜像,那路由就填写“dockerhub.testmirror.com/*”,当然这里想直接用主域名也可以,没限制;区域就选择对应的主域名,然后添加路由。
点击添加路由即可看到自己添加的路由:
- 之后进入dns解析,添加一个对应的二级域名的解析,例如上面是用“dockerhub.testmirror.com”,那这里就添加一个对应的ipv4解析记录;解析地址随便填写,填8.8.8.8就可以,然后旁边的代理状态一定要启用。
验证并拉取镜像
如果以上步骤都无误,就可以直接拉取docker镜像,但是需要对相应的拉取命令做更改。
- 服务器上拉取
例如原拉取命令如下:
1 | docker pull library/nginx:1.20.2 |
那就需要在前面加上自己的域名:
1 | docker pull 自己的域名/library/nginx:1.20.2 |
当然也可以直接在配置文件中设置registry-mirrors,替换成自己的域名,然后重启下docker服务即可:
1 | { |