利用cloudflare的worker服务搭建DockerHub镜像加速

利用cloudflare的worker服务搭建DockerHub镜像加速

前因

由于国内的docker镜像源(上海交通大学、中科大、网易、阿里)都关闭了,作为一个docker的重度用户,如果不能方便的拉取一些基础镜像将会大大影响后面的工作效率。反正支持国家政策,我就自己先临时解决吧

image-20240612125309688

解决方案

选择合适的国内镜像源

参考一些大佬整理的仓库: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 步骤来实施。

这里以 自定义域名 配置方式举例, 步骤如下:

  1. Fork Repo — 克隆仓库到您的github

  2. 修改克隆后您仓库的 src/index.jsconst routes 块的内容

    const routes = {
     "docker.199604.com": "https://registry-1.docker.io",
     "quay.199604.com": "https://quay.io",
     "gcr.199604.com": "https://gcr.io",
     "k8s-gcr.199604.com": "https://k8s.gcr.io",
     "k8s.199604.com": "https://registry.k8s.io",
     "ghcr.199604.com": "https://ghcr.io",
     "cloudsmith.199604.com": "https://docker.cloudsmith.io",
    };
    
  3. 点击 Deploy 按钮部署,根据步骤一步一步操作即可,部署后如下

    image-20240613234205259

image-20240612130602764

  1. 在 Cloudflare 的 DNS 记录里添加 CNAME 指向部署后的 {workername}.{username}.workers.dev 地址。

image-20240612130746530

  1. 在 Workers 的 HTTP Routes 里,添加 xxx.your-domain.com/* 路由指向 cloudflare-docker-proxy, xxx 就是 docker,quay,gcr 等,如下:

image-20240612130902249

Docker Registry Mirror 配置

将配置后的 docker.<your-domain>.com Mirror 添加到 /etc/docker/daemon.jsonregistry-mirrors 中并重启 Docker 生效。

{
   "registry-mirrors": [
     "https://docker.m.daocloud.io", 
     "https://docker.xxxx.com"
   ],
   "exec-opts": ["native.cgroupdriver=systemd"],
   "live-restore":true,
   "log-driver":"json-file",
   "log-opts": {"max-size":"200m", "max-file":"3"},
   "max-concurrent-downloads": 10,
   "storage-driver": "overlay2",
   "experimental": true 
}

# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
进行测试

image-20240612131304375

补充说明

最近使用时候会发现这样下载一些镜像比如 nginx会出现如下错误:

docker pull docker.xxx.com/nginx:1.21 

Error response from daemon: pull access denied for docker.xxx.com/nginx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

这个错误其实是docker官方提供的镜像,默认是在library这个命名空间下的,library 命名空间下的镜像是docker官方维护的,我们通过docker官方地址下载是可以省略命名空间的名字,下载nginx镜像实际上下载的是docker.io/library/nginx:1.21

image-20240613095456556

因此我们使用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下载即可

image-20240613095713633

参考

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇