镜像加速终极指南:3 分钟把 gcr.io 下载提速 20 倍
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
周五凌晨两点,我盯着docker pull的进度条一动不动:58KB/s,还剩 1.2GB,照这个速度要再等 6 个小时。断网重试,进度清零,项目联调延期两天。这是每个国内开发者的日常——gcr.io、ghcr.io、quay.io 这些镜像仓库全在国外,直连速度普遍不到 100KB/s,跨洋链路丢包率高达 30%。DaoCloud 的开源项目 public-image-mirror 专治这个病:一个连接全球源站、面向国内用户的稳定容器镜像加速服务,把小时级的拉取压缩到分钟级。下面是我把生产环境镜像整体迁移到加速源的全过程,可直接复制照做。
容器镜像加速的底层机制一图流
先看整体机制,再上手操作。
把它想成"国内快递驿站":海外仓库发货又慢又贵,驿站第一次收到你的订单才去海外调货(懒加载),到货后存进本地仓,之后整个园区的人取同一件货都直接走驿站,谁都不用再等跨境物流。你不需要提前登记、不需要自己建仓,首次请求自动触发同步。
吃透 3 个核心机制:懒加载、哈希校验、白名单
1. 懒加载同步:首次请求即触发。项目不预先搬运全量镜像,而是你第一次访问时才从源站同步并缓存。Manifest 内存缓存 1 小时(源站 tag 更新后最多 1 小时生效),磁盘缓存 30 天,过期自动重新同步。效果是:冷门镜像首次拉取略慢,热门镜像几乎秒开。
2. 哈希一致性校验:内容与源站 100% 一致。它是 mirror,不是第三方"重打 tag",所有镜像的 sha256 与源站完全一致,可用docker inspect核对 RepoDigest。项目在 hack/ 目录提供 verify-allows.sh、verify-image-match.sh 等脚本做日常巡检,从机制上杜绝"版本混乱"。
3. 白名单准入 + 闲时限流:稳定性的底线。allows.txt 目前维护 1315 条镜像/命名空间白名单,按需申请,防止恶意或超大镜像拖垮带宽;官方建议把大镜像的同步放到凌晨 01-07 点,错峰体验更佳。
Prometheus 镜像国内加速:从白名单检查到哈希验证全流程
我以 quay.io 上的 Prometheus(国内拉取的老大难)为例完整走一遍,全程约 3 分钟。
第一步:克隆项目并确认白名单
# 克隆项目,拿到 allows.txt 与官方校验脚本 git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror cd public-image-mirror # 确认目标镜像是否在支持列表 grep "quay.io/prometheus" allows.txt # 或用官方脚本校验,命中返回 0 ./hack/verify-allows.sh allows.txt quay.io/prometheus/prometheus && echo "已在白名单,放心加速"预期输出:quay.io/prometheus/*与quay.io/prometheus-operator/*均在列表中,说明整个命名空间都支持加速。
第二步:拼加速地址(两种姿势任选)
# 方式一:加前缀(推荐,所有源站通用) # 规则:m.daocloud.io/<完整源镜像> m.daocloud.io/quay.io/prometheus/prometheus:v2.53.0 # 方式二:域名替换(仅限 README 列出的 12 个源站) # 替换表:quay.io -> quay.m.daocloud.io quay.m.daocloud.io/prometheus/prometheus:v2.53.0注意:前缀替换规则是人工维护的,表中没列出的源站别硬套,直接提 issue 申请;更不要把 docker.io 之外的替换域名配置进 Docker 的 registry-mirrors。
第三步:拉取、启动、验哈希
# 拉取加速镜像(首次触发同步,之后全部走缓存) docker pull m.daocloud.io/quay.io/prometheus/prometheus:v2.53.0 # 启动容器验证版本 docker run --rm m.daocloud.io/quay.io/prometheus/prometheus:v2.53.0 --version # 核对 RepoDigest,确认 sha256 与官方源一致 docker inspect --format='{{index .RepoDigests 0}}' m.daocloud.io/quay.io/prometheus/prometheus:v2.53.0提示:生产环境优先用
@sha256:锁定镜像,其次用明确版本号 tag。latest这类可变 tag 更新后,旧缓存最多 1 小时后才会同步新内容,容易踩版本漂移的坑。
K8s 与内网场景的镜像加速进阶配置
K8s 集群整体加速。用 kubeadm 安装时把镜像仓库指向加速源,一行配置全集群生效:
apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: k8s.m.daocloud.iocontainerd 则为各源站配置 mirror 指向(如 gcr.m.daocloud.io、quay.m.daocloud.io);Docker 更简单,在/etc/docker/daemon.json的 registry-mirrors 加一行https://docker.m.daocloud.io重启即生效。
内网部署私有缓存代理。项目在 docs/local-cache/README.md 给出开箱即用的 docker-compose 方案:用registry:3的 proxy 模式指向m.daocloud.io,缓存 TTL 设 2160 小时(90 天)。团队所有机器只需改一处 daemon.json,即可共享同一个缓存,重复拉取零公网流量,离线环境也能部署。
加速效果实测:速度与成功率量化对比
| 对比项 | 直连 quay.io | 经 m.daocloud.io 加速 |
|---|---|---|
| 平均下载速度 | 约 50-100KB/s | 数 MB/s 起步 |
| 拉取 3.9GB 镜像耗时 | 2 小时以上 | 约 6 分钟 |
| 单次拉取成功率 | 约 75%,易中断 | 99.9% |
| 内容一致性 | 官方源 | sha256 与源站完全一致 |
服务覆盖 gcr.io、ghcr.io、quay.io、registry.k8s.io、mcr.microsoft.com、nvcr.io、docker.elastic.co 等 12 个主流源站,白名单 1315 条,基本覆盖国内开发者的高频镜像需求。
申请新镜像与参与贡献的正确姿势
想用的镜像不在白名单?直接提 issue 申请,附上镜像地址和用途,维护者响应很快;想参与共建,hack/ 目录下的校验与格式化脚本欢迎 PR。下期我打算拆解如何用 docs/local-cache 方案搭建公司级私有镜像节点,把加速能力真正握在自己手里。先把今天的方案用起来,评论区聊聊你拉过最慢的镜像是什么。
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考