利用cloudflare的worker服务搭建DockerHub镜像加速
前因
由于国内的docker镜像源(上海交通大学、中科大、网易、阿里)都关闭了,作为一个docker的重度用户,如果不能方便的拉取一些基础镜像将会大大影响后面的工作效率。反正支持国家政策,我就自己先临时解决吧
解决方案
选择合适的国内镜像源
参考一些大佬整理的仓库:https://github.com/kubesre/docker-registry-mirrors
目前来看国内还能使用的只有m.daocloud.io
可用了,具体使用也可参考:https://github.com/DaoCloud/public-image-mirror
自建镜像代理-正在使用
利用cloudflare的worker服务搭建自己的registry-mirrors,cf的workers每日总计免费10w次请求额度,普通人是几乎不可能用完,但为防止滥用仍建议添加路由和规则限制他人使用,这个方法的本质上是利用cf来进行流量中转,受限于cf的速度,如果自己所在地区cf不可用或者速度偏低,那可以自己用服务器搭建对应的中转服务
项目地址: https://github.com/ciiiii/cloudflare-docker-proxy
前提
- 有 Cloudflare 账号
- 有自定义的域名,且域名托管在 Cloudflare 上(不想花钱购买域名可以用免费的二级域名,比如
eu.org的二级域名
) - Cloudflare Workers 额度足够
cloudflare-docker-proxy使用部署
这里使用 Cloudflare Worker - cloudflare-docker-proxy
搭建。可根据原文 README 步骤来实施。
这里以 自定义域名 配置方式举例, 步骤如下:
- Fork Repo — 克隆仓库到您的github
-
修改克隆后您仓库的
src/index.js
的const routes
块的内容 - 点击
Deploy
按钮部署,根据步骤一步一步操作即可,部署后如下
- 在 Cloudflare 的 DNS 记录里添加
CNAME
指向部署后的{workername}.{username}.workers.dev
地址。
- 在 Workers 的 HTTP Routes 里,添加
xxx.your-domain.com/*
路由指向 cloudflare-docker-proxy, xxx 就是docker,quay,gcr
等,如下:
Docker Registry Mirror 配置
将配置后的 docker.<your-domain>.com
Mirror 添加到 /etc/docker/daemon.json
的 registry-mirrors
中并重启 Docker 生效。
进行测试
补充说明
最近使用时候会发现这样下载一些镜像比如 nginx
会出现如下错误:
这个错误其实是docker官方提供的镜像,默认是在library这个命名空间下的,library
命名空间下的镜像是docker官方维护的,我们通过docker官方地址下载是可以省略命名空间的名字,下载nginx镜像实际上下载的是docker.io/library/nginx:1.21
因此我们使用CF代理的地址下载时候命名空间名称就不能省略,需要使用docker.xxx.com/library/nginx:1.21
下载,如果是镜像本身就有命名空间,比如docker.io/grafana/grafana:8.3.1
是由 Grafana Labs 维护的镜像,就直接使用docker.xxx.com/grafana/grafana:8.3.1
下载即可
参考
1.https://mp.weixin.qq.com/s/BSo3vFJoVe8KzAt3vxJQYA
2.https://mp.weixin.qq.com/s/9yAN9wj152vZNMZb1ReXqA
–cf 添加域名(添加域名ns服务器,免费的二级域名)
3.https://mp.weixin.qq.com/s/5UMqMRvZUGT0TzWMWuF_fw
4.https://github.com/ciiiii/cloudflare-docker-proxy
–仓库
5.https://mp.weixin.qq.com/s/fQ4LLZQBDQw7yDS7DKwHnQ