基于cloudflare-worker的docker代理实践

本文介绍了一种基于 Cloudflare Worker 的 Docker 代理方案,用于高效访问官方 Docker 仓库和第三方 Docker 仓库(如 quay.io、k8s.gcr.io 等)。方案基于 cloudflare-docker-proxy,并记录了个人实践过程。

worker配置

新建worker

首先,新建一个 Worker,并将以下代码复制到 Worker 中:
https://github.com/ciiiii/cloudflare-docker-proxy/blob/master/src/index.js

修改路由信息

1
2
3
4
5
6
7
8
9
var routes = {
"docker.registry.个人域名": "https://registry-1.docker.io",
"quay.registry.个人域名": "https://quay.io",
"gcr.registry.个人域名": "https://gcr.io",
"k8s-gcr.registry.个人域名": "https://k8s.gcr.io",
"k8s.registry.个人域名": "https://registry.k8s.io",
"ghcr.registry.个人域名": "https://ghcr.io",
"cloudsmith.registry.个人域名": "https://docker.cloudsmith.io"
};

添加自定义域

在 Cloudflare 的【设置】->【触发器】->【自定义域】中分别添加以下条目:

  • registry.个人域名
  • docker.registry.个人域名
  • quay.registry.个人域名
  • gcr.registry.个人域名

设置环境变量

【设置】->【变量】->【环境变量】添加以下配置
MODE = “production”
TARGET_UPSTREAM = “”

这样,你可以通过【registry.个人域名】统一访问各个子域名的映射关系,各个子域名则负责具体的映射。

使用测试

查看映射关系

直接浏览器访问 【registry.个人域名】,可以看到包含域名映射关系的json数据

DockerHub

直接测试

1
2
docker pull docker.registry.个人域名/ubuntu:22.04

配置镜像

编辑 /etc/docker/daemon.json 文件,添加 Docker 官方仓库的镜像配置:

1
2
3
4
5
{
"registry-mirrors": [
"https://docker.registry.个人域名"
]
}

然后重启 Docker 服务使配置生效:

1
2
3
systemctl daemon-reload
systemctl restart docker

测试:

1
2
docker pull mysql:5.7

接下来测试其他仓库

k8s

以 k8s.gcr.io/kube-apiserver:v1.26.0 为例,注意 k8s.gcr.io 已经迁移到 registry.k8s.io,因此建议使用【k8s.registry.个人域名】

1
2
3
docker pull k8s.registry.个人域名/kube-apiserver:v1.26.0
docker tag k8s.registry.个人域名/kube-apiserver:v1.26.0 k8s.gcr.io/kube-apiserver:v1.26.0

quay

尽管目前 quay.io 访问尚可,但为了防止未来访问问题,建议配置代理。

以 quay.io/prometheus-operator/prometheus-operator:v0.50.0 为例:

1
2
3
docker pull quay.registry.个人域名/prometheus-operator/prometheus-operator:v0.50.0
docker tag quay.registry.个人域名/prometheus-operator/prometheus-operator:v0.50.0 quay.io/prometheus-operator/prometheus-operator:v0.50.0

通过上述配置和测试,便可以高效地访问各种 Docker 仓库,提高镜像拉取速度和稳定性。


基于cloudflare-worker的docker代理实践
https://linshenkx.github.io/cloudflare-worker-docker-proxy/
作者
John Doe
发布于
2024年6月9日
许可协议