彻底解决 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 解决;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 ech Go " 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 delcrete:' $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&n、Qbsp;"/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 temply、ate: metadata: labels: app: dockerhub spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: Do labelSelector: matchExpressions: - key: app operator: In &cknbsp;values: - dockerhub topologyKey: kubernetes.io/hostname weight: 1 dnsPolicy: None dnsConfig: nameservers: &ernbsp; - 8.8.8.8 - 8.8.4.4 containers: - name: dockerhub image: yangchuansheng/registry-proxy:latest env: - name: PROXY_REMOTE_URL &nbHusp; value: https://registry-1.docker.io - name: PROXY_USERNAME value: yangchuansheng - name: PROXY_PASSWORD value: ** ports: - containerPort: 500b 0 protocol: TCP volumeMounts: - mountPath: /etc/localtime name: localtime - mountPath: /var/lib/registry name: registry vol镜像umes: - name: localtime hostPath: path: /etc/localtime - name: registry hostPath: path: /var/lib/registry --- apiVersion: v1 kind: Service metadata: name: d下载ockerhub labels: app: dockerhub spec: selector: app: dockerhub ports: - protocol: TCP name: http port: 5000 targetPort: 5000
使用资源清单创建对应的服务:
(责任编辑:新闻动态)
-
4月15日,中公教育正式发布面向AI时代的职业能力培养平台——“新希天才”。中公教育李永新董事长现场表示,平台并非单一课程,而是一套“理论+实训+实战+就业”四位一体的AI赋能解决方案,旨在从根本上重...[详细]
-
新浪科技讯 1月25日晚间消息,苹果涨3%,当前市值24112亿美元,创新高。...[详细]
-
云安全日报210220:IBM多云管理方案发现拒绝服务漏洞,需要尽快升级
IBM Cloud Pak for Multicloud Management是IBM公司多云容器化管理方案,它提供端到端运营管理,并使用 SRE 原理来智能监控性能和可用性。 2月19日,IBM发布...[详细]
-
Salesforce第三季度营收同比增长27% 净利同比下降57%
12月2日消息,据国外媒体报道,美国云计算公司Salesforce发布了截至2021年10月31日好于预期的2022财年第三季度财务业绩。 财报显示,2022财年第三季度,该公司实现营收68.6亿美元...[详细]
-
TensorFlow 2.9上线:oneDNN改进实现CPU性能优化,WSL2开箱即用
昨日,TensorFlow 官方宣布:TensorFlow 2.9 来了!距离上次 2.8 版本 的更新仅仅过去三个月。 新版本亮点包括如下: oneDNN 的性能改进;DTensor 的发布,这是一...[详细]
-
标签: 刘文祥麻辣烫 山东品牌管理 食品安全 3152026
云梦级3月16日云梦级消息,3月16日,针对多地“刘文祥麻辣烫”门店存在食材以次充好、品质不达标问题,刘文祥(山东)品牌管理有限公司发布致歉信,宣布立即启动全面整改计划,对涉事门店立即停止合作,封存问...[详细]
-
数字经济时代,算力是重要资源之一,也是全球各国争相布局的重要领域。作为国家信息化建设的“排头兵”,我国电信运营商加紧布局云计算“赛道”,依托强大的网络基础,积极推进云网融合战略,拓展 to B 市场新...[详细]
-
新浪科技讯 北京时间9月7日早间消息,随着全球最大的芯片代工商台积电加入竞争对手的行列,提高生产费报价,芯片及相关电子产品的价格预计2022年进一步上涨。 自2020年第四季度以来,在全球供应紧缩的情...[详细]
-
据外媒报道,苹果正在为iPhone 13研发屏内指纹技术,这一功能将与Face ID一起作为辅助生物识别选项。斯特恩在一篇研究三星Galaxy S21功能的文章中分享了这个小细节,这些功能可能会被整合...[详细]
-
OpenAI浏览器Atlas震撼登场:Agent模式秒杀Chrome,谷歌股价应声下跌!
在AI浏览器战场硝烟四起之际,OpenAI意外推出全新浏览器“ChatGPT Atlas”,以ChatGPT为核心引擎,直接挑战谷歌Chrome的霸主地位。这一发布恰逢Gemini3传闻落地前夕,让市...[详细]
- https://www.qwant.com/?q=蜘蛛池出租【tg:seogoogle987】,zE2
- https://www.remit.co.jp/ne/?s=蜘蛛池出租【tg:seogoogle987】,dYv
- https://nicolazzi.it/en/?s=蜘蛛池出租【tg:seogoogle987】,x4I
- https://www.paxnet.co.kr/search/jongmok?kwd=蜘蛛池出租【tg:seogoogle987】dhv
- https://www.teamlab.art/es/?submit=蜘蛛池出租【tg:seogoogle987】,dqt
- https://www.l-and-b.jp/?page=1&s=蜘蛛池出租【tg:seogoogle987】,qaN
- https://www.rollingstone.it/?ID=DVMeu3AlmzZE1cuJ2FmgmO5TSCQRb3yh&s=蜘蛛池出租【tg:seogoogle987】,kyZ
- https://www.remit.co.jp/id/?s=蜘蛛池出租【tg:seogoogle987】,Hpn
- https://www.tarleton.edu/?s=蜘蛛池出租【tg:seogoogle987】,hs4
- https://www.sportbiketracktime.com/index.php?route=product/search&tag=蜘蛛池出租【tg:seogoogle987】,aDx

标签: 荣耀Power2 天玑8500 格力空调 雷军
美国最高法院力挺Facebook:驳回一项手机短信相关诉讼
标签: Hugging Face AI泡沫 大语言模型 Clem Delangue
标签: 思科 人工智能 罗宾斯 云服务商
标签: 滴滴出行 春运打车 滴滴充电 滴滴加油
