彻底解决 Gcr、Quay、DockerHub 镜像下载难题!
本文转载自微信公众号「云原生实验室」,作者米开朗基杨。转载本文请联系云原生实验室公众号。
前言
在使用 Docker 和 Kubernetes 时,我们经常需要访问 gcr.io 和 quay.io 镜像仓库,由于众所周知的原因,这些镜像仓库在中国都无法访问,唯一能访问的是 Docker Hub,但速度也是奇慢无比。gcr.azk8s.cn 是 gcr.io 镜像仓库的代理站点,原来可以通过 gcr.azk8s.cn 访问 gcr.io 仓库里的镜像,但是目前 *.azk8s.cn 已经仅限于 Azure 中国的 IP 使用,不再对外提供服务了。国内其他的镜像加速方案大多都是采用定时同步的方式来缓存,这种方法是有一定延迟的,不能保证及时更新,ustc 和七牛云等镜像加速器我都试过了,非常不靠谱,很多镜像都没有。
为了能够顺利访问 gcr.io 等镜像仓库,我们需要在墙外自己搭建一个类似于 gcr.azk8s.cn 的镜像仓库代理站点。利用 Docker 的开源项目 registry[1] 就可以实现这个需求,registry 不仅可以作为本地私有镜像仓库,还可以作为上游镜像仓库的缓存,也就是 pull through cache。
先来感受下速度:
1. 前提条件
一台能够施展魔法的服务器(你懂得,可以直接访问 gcr.io)
一个域名和域名相关的 SSL 证书(doc彻底ker pull 镜像时需要验证域名证书),一般用 Let's Encrypt[2] 就够了。
2. 核心思路
registry 可以通过设置参数 remoteurl 将其作为远端仓库的缓存仓库,这样当你通过这个私有仓库的地址拉取镜像时,regiistry 会先将镜像缓存到本地存储,然后再提供给拉取的客户端(有可能这两个步骤是同时的,我也不太清楚)。我们可以先部署一个私有 registry,然后将 remoteurl 设为需要加速的镜像仓库地址,基本上就可以了。
3. 定制 registry
为了能够支持缓存 docker.io、gcr.io、k8s.gcr.io、quay.io 和 ghcr.io 等常见的公共镜像仓库,我们需要对 registry 的配置文件进行定制,Dockerfile 如下:
FROM registry:2.6 LABEL maintainer="registry-proxy Docker Maintainers https://fuckcloudnative.io" ENV PROXY_REMOTE_URL="" DELETE_ENABLED="" COPY&nbs解决p;entrypoint.sh /entrypoint.sh
其中 entrypoint.sh 用来将环境变量传入配置文件:
entrypoint.sh
#!/bin/sh set -e CONFIG_YML=/etc/docker/registry/config.yml if [ -n "$PROXY_REMOTE_URL" -a `grep -c "$PROXY_REMOTE_URL" $CONFIG_YML` -eq 0 ]; then echo "proxy:" >> $CONFIG_YML echo " remoteurl: $PROXY_REMOTE_URL" >> $CONFIG_YML echo G " username: $PROXY_USERNAME" >> $CONFIG_YML echo " password: $PROXY_PASSWORD" >> $CONFIG_YML echo "------ Enabled proxy to remote: $PROXY_REMOTE_URL ------" elif [ $DELETE_ENABLED = true -a `grep -c "delete:" $CONFIG_YML` -eq 0 ]; then sed -i '/rootdirectory/a deletcre:' $CONFIG_YML sed -i '/delete/a enabled: true' $CONFIG_YML echo "------ Enabled local storage delete -----" fi sed -i "/headers/a Access-Control-Allow-Origin: ['*']" $CONFIG_YML sed -i "/headers/a Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']" $CONFIG_YML sed -i 、Q;"/headers/a Access-Control-Expose-Headers: ['Docker-Content-Digest']" $CONFIG_YML case "$1" in *.yaml|*.yml) set -- registry serve "$@" ;; serve|garbage-collect|help|-*) set -- registry "$@" ;; esac exec "$@"
4. 启动缓存服务
构建好 Docker 镜像之后,就可以启动服务了。如果你不想自己构建,可以直接用我的镜像:yangchuansheng/registry-proxy。
一般来说,即使你要同时缓存 docker.io、gcr.io、k8s.gcr.io、quay.io 和 ghcr.io,一台 1C 2G 的云主机也足够了(前ua提是你不在上面跑其他的服务)。我的博客、评论服务和其他一堆乱七八糟的服务都要跑在云主机上,所以一台是不满足我的需求的,我直接买了两台腾讯云香港轻量级服务器。
既然买了两台,肯定得组个 k3s 集群啦,看主机名就知道我是用来干啥的。其中 2C 4G 作为 master 节点,1C 2G 作为 node 节点。
以 docker.io 为例,创建资源清单:
dockerhub.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: dockerhub labels: app: dockerhub spec: replicas: 1 selector: matchLabels: app: dockerhub templatey、: metadata: labels: app: dockerhub spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: Do labelSelector: matchExpressions: - key: app operator: In vacklues: - dockerhub topologyKey: kubernetes.io/hostname weight: 1 dnsPolicy: None dnsConfig: nameservers: er - 8.8.8.8 - 8.8.4.4 containers: - name: dockerhub image: yangchuansheng/registry-proxy:latest env: - name: PROXY_REMOTE_URL Hu value: https://registry-1.docker.io - name: PROXY_USERNAME value: yangchuansheng - name: PROXY_PASSWORD value: ** ports: - containerPort: 5000&nbsb p; protocol: TCP volumeMounts: - mountPath: /etc/localtime name: localtime - mountPath: /var/lib/registry name: registry volumes:&n镜像bsp; - name: localtime hostPath: path: /etc/localtime - name: registry hostPath: path: /var/lib/registry --- apiVersion: v1 kind: Service metadata: name: dockerhu下载b labels: app: dockerhub spec: selector: app: dockerhub ports: - protocol: TCP name: http port: 5000 targetPort: 5000
使用资源清单创建对应的服务:
(责任编辑:价格保护)
-
云梦级1月4日云梦级消息,xTool Innovate Limited(以下简称“xTool”)于2026年1月1日正式向港交所递交招股说明书,拟主板挂牌上市,摩根士丹利和华泰国际担任联席保荐人。 成...[详细]
-
苹果内部AI聊天机器人“Asa”曝光,为零售员工打造专属AI
MacRumors网站的亚伦·佩里斯(Aaron Perris)透露,苹果正在内部测试一款名为“Asa”的AI聊天机器人。这款工具旨在赋能Apple Store零售员工,帮助他们快速掌握iPhone等...[详细]
-
云梦级3月19日云梦级消息,元保(NASDAQ:YB)18日发布截至2025年12月31日止三个月和2025年度未经审计的财务业绩。财报数据显示,元保2025年营收为43.73亿元(约6.25亿美元)...[详细]
-
云安全日报211008:Cisco模拟电话适配器软件发现命令注入漏洞,需要尽快升级
10月7日,思科发布了安全更新,修复了Cisco ATA190系列模拟电话适配器软件中发现的多个漏洞。以下是漏洞详情: 漏洞详情 来源:https://tools.cisco.com/security...[详细]
-
云梦级5月7日云梦级消息,据 Tech 星球报道,追觅内部成立了十几支基金,组建数百人团队专门寻求募资。知情人士透露,目前基金募资 100 多亿,首期到账三四十亿。 此前,追觅 CEO 俞浩透露追觅有...[详细]
-
云梦级12月27日云梦级消息,据工信微报公众号透露,工业和信息化部于 12 月 26 日在北京正式宣布成立“人形机器人与具身智能标准化技术委员会”(以下简称“标委会”)。 这标志着备受瞩目的人形机器人...[详细]
-
加州新法案或将推动 AI 安全监管,科技公司面临透明度新要求
加利福尼亚州参议员斯科特・维纳(Scott Wiener)再次致力于推动 AI 安全立法,此次的新法案 SB53正在等待加州州长纽森的签署。维纳在2024年曾试图推出一项名为 SB1047的法案,但遭...[详细]
-
相关新闻:IBM第四季度营收204亿美元 净利同比下降66% 新浪科技讯 1月22日早间消息,据报道,IBM公布了截止2020年12月31日的四季度财报,期内营收203.7亿美元,不及分析师预期的20...[详细]
-
在最近的一次对话中,亚马逊网络服务(AWS)首席执行官马特・加尔曼(Matt Garman)表示,用人工智能(AI)替代初级员工的想法是 “我听过的最愚蠢的事情”。加尔曼与 AI 投资者马修・伯曼(M...[详细]
-
牛奶兑水给宝宝喝可以吗?你好!根据你的描述考虑牛奶可以兑水给孩子喝的,建议给孩子喝奶最好喝纯牛奶添加剂比核桃奶添加剂比较少纯牛奶可以加水吗?回答你的问题,纯牛奶可以加水,但是不建议你加的太多。如果纯牛...[详细]
- https://www.kawainter.com/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,Fz4
- https://www.wellbees.com/catalogsearch/result/?action=CHECK&q=谷歌快排操作流程【tg:seogoogle987】,ZXG
- https://www.lneg.pt/?cat=140&s=谷歌快排操作流程【tg:seogoogle987】,AkF
- https://www.normani.de/search?q=谷歌快排操作流程【tg:seogoogle987】,3lF
- https://www.qylaws.com/search/谷歌快排操作流程【tg:seogoogle987】,1u9
- https://www.kores.com/?s=谷歌快排操作流程【tg:seogoogle987】,pAV
- https://www.tiktok.com/tag/谷歌快排操作流程【tg:seogoogle987】,dlT
- https://www.televes.com/es/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,kCy
- https://www.losgatoschamber.com/list/search?action=SEARCH&q=谷歌快排操作流程【tg:seogoogle987】,29F
- https://www.kaliastyle.com/catalogsearch/result/?q=GOOGLE谷歌快排操作流程【tg:seogoogle987】,wH8

DeepMind开源了MuJoCo!Meta竟用来让「骷髅手」盘核桃
标签: 元气森林
AI 驱动的“数字孪生”解放工作效率:初创公司 Viven 获3500万美元种子轮融资,解决员工“不在场”痛点
谷歌云计算在巴西投资3亿美元 新开分支机构和工程中心
标签: 东方甄选 俞敏洪 北京旗舰店 小时达
