因为不能直接访问国外的镜像仓库,下载国外的docker镜像速度一直让国内用户 头疼不已,虽然有群友使用定时同步的方式每天同步进行到国内仓库,但这种方式是有一定延迟的。我们通过 cloudflare 的全球 CDN 节点,以 Workers 中转代理的方式来访问国外镜像仓库,从而加速镜像的下载。
镜像下载的网络路径
+-----------+ +-------------+ +--------------+
| +----->+ Cloudflare +---->+ |
| Client | | Workers | | [Docker Hub] |
| +<-----+ [CDN] +<----+ |
+-----------+ +-------------+ +--------------+
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 或应用程序原始服务器发出后续请求,以将数据返回给用户。 Workers 在 Cloudflare 全球云网络中的位置为无服务器创建了以下用例:
计费相关
在 overview
页面可参看使用情况。
-
免费版每天有 10 万次免费请求,并且有每分钟1000次请求的限制,每个请求最多占用 10 毫秒 CPU 时间。超过限制后,会返回错误。
-
每月 $5 的高级版本,每月可用 1000 万次请求(超出部分 $0.5/百万次请求),每个请求最多占用 50 毫秒 CPU 时间。
网络相关
如果说你访问workers.dev
的域名也是非常慢,或者访问不到的时候,可以试试 hosts 绑定, 大几率你能访问到。
104.18.38.1 gcr.lework.workers.dev
104.18.38.1 docker.lework.workers.dev
104.18.38.1 quay.lework.workers.dev
# or
104.18.39.1 gcr.lework.workers.dev
104.18.39.1 docker.lework.workers.dev
104.18.39.1 quay.lework.workers.dev
更多内容请见 官方文档
下载 docker hub 的镜像
源地址: centos:latest
or registry-1.docker.io/library/centos:latest
代理地址: docker.lework.workers.dev/library/centos:latest
# time docker pull docker.lework.workers.dev/library/centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for docker.lework.workers.dev/library/centos:latest
real 2m6.270s
user 0m0.061s
sys 0m0.043s
接着,将镜像标签还原成我们需要的
# docker tag docker.lework.workers.dev/library/centos:latest centos:latest
镜像信息
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 4 months ago 237MB
docker.lework.workers.dev/library/centos latest 470671670cac 4 months ago 237MB
你也可以将 docker 的 registry-mirrors
设置为代理地址
# /etc/docker/daemon.json
{
"debug": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"live-restore": true,
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": [
"https://docker.lework.workers.dev/"
]
}
下载 grc 的镜像
源地址: gcr.io/google-containers/kube-controller-manager:v1.16.10
代理地址: gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10
# time docker pull gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10
v1.16.10: Pulling from google-containers/kube-controller-manager
83b4483280e5: Pull complete
7cc17f1decf7: Pull complete
Digest: sha256:2f162989247c7b6f3df63f98e139fec04058cd414063312564ced2e0500a3086
Status: Downloaded newer image for gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10
real 0m50.104s
user 0m0.088s
sys 0m0.044s
只耗费了50秒就下载完成了。
接着,将镜像标签还原成我们需要的
# docker tag gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10 gcr.io/google-containers/kube-controller-manager:v1.16.10
# docker tag gcr.lework.workers.dev/google-containers/kube-controller-manager:v1.16.10 k8s.gcr.io/kube-controller-manager:v1.16.10
这样,我们需要的k8s镜像就有了
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google-containers/kube-controller-manager v1.16.10 95b2e4f548f1 3 weeks ago 162MB
gcr.lework.workers.dev/google-containers/kube-controller-manager v1.16.10 95b2e4f548f1 3 weeks ago 162MB
k8s.gcr.io/kube-controller-manager v1.16.10 95b2e4f548f1 3 weeks ago 162MB
手动下载比较麻烦?那试试脚本全自动吧
# 下载一个镜像
curl -sSL https://git.io/getgcr | bash -s gcr.io/google_containers/pause-amd64:3.1
# 下载多个镜像
curl -sSL https://git.io/getgcr | bash -s "k8s.gcr.io/kube-{apiserver,controller-manager,proxy,scheduler}:v1.16.10"
# 指定一个版本,下载k8s所有组件
# curl -sSL https://git.io/getgcr | bash -s - -t v1.16.10
下载 quay 的镜像
源地址:quay.io/calico/node:release-v3.14
代理地址: quay.lework.workers.dev/calico/node:release-v3.14
# time docker pull quay.lework.workers.dev/calico/node:release-v3.14
release-v3.14: Pulling from calico/node
0a63a759fe25: Pull complete
9d6c79b335fa: Pull complete
793c7788adf2: Pull complete
d6fd5aa1aa3b: Pull complete
dd060b14165e: Pull complete
b3a5c919884d: Pull complete
98452efe85ce: Pull complete
5cac849b45bb: Pull complete
465b613925ba: Pull complete
873a0e328036: Pull complete
a8f25e74e20c: Pull complete
ba4864f0dfd8: Pull complete
463ffadd3f28: Pull complete
Digest: sha256:e53bf963ef147b9ee9a955b8d14526fa6daf4abea4de3fa6f8b9fa9240a98b55
Status: Downloaded newer image for quay.lework.workers.dev/calico/node:release-v3.14
real 1m33.761s
user 0m0.113s
sys 0m0.096s
接着,将镜像标签还原成我们需要的
# docker tag quay.lework.workers.dev/calico/node:release-v3.14 quay.io/calico/node:release-v3.14
镜像信息
# docker tag quay.lework.workers.dev/calico/node:release-v3.14 quay.io/calico/node:release-v3.14
[root@node130 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/calico/node release-v3.14 2b480bbbe734 18 hours ago 263MB
quay.lework.workers.dev/calico/node release-v3.14 2b480bbbe734 18 hours ago 263MB
创建 workers
我已将上述的代理脚本放置在github中,大家可以在 workers 上创建自己的代理。
网址:https://workers.cloudflare.com
脚本:https://github.com/lework/cloudflare-workers
- 注册账号
- 登陆
- Start building
- 取一个子域名
- Create a Worker
- 复制 js 脚本内容 到左侧代码框,Save and deploy。