利用cloudflare的worker服务搭建DockerHub镜像加速
本文最后更新于 796 天前,其中的信息可能已经有所发展或是发生改变。

利用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
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Image
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇