十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

把拉镜像从小时级压到分钟级:public-image-mirror 国内镜像加速实战

把拉镜像从小时级压到分钟级:public-image-mirror 国内镜像加速实战 把拉镜像从小时级压到分钟级:public-image-mirror 国内镜像加速实战【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror凌晨一点,发布窗口被一个拉镜像动作卡住:K8s 节点上prom/node-exporter的拉取进度条 40 分钟纹丝不动,直连源站的带宽被挤到几乎为零。DaoCloud 维护的 public-image-mirror 做的事很简单——给镜像地址加一个前缀,把国外公共仓库的镜像从国内就近拉下来。前 100 字说清楚两件事:它是什么、什么时候别用。本文给出一条三分钟内跑通的最短路径,再按你所在的位置——宿主机、集群、CI 构建机——给出各自最推荐的一份配置。一句话定位与适用边界public-image-mirror 是一个面向国内网络环境的容器镜像加速服务:它只是源仓库的 Mirror,采用懒加载机制,所有 sha256 与源保持一致;缓存内容只保留 30 天,过期后需要重新同步。它不替你部署自建 registry,不构建镜像,也不加速私有镜像。使用前提有一条硬性的:镜像必须在 allows.txt 白名单内,不在此文件里的镜像拉不到,这是服务侧的公开白名单。另外 README 提示,高峰期(北京时间 07:00 之后)队列拥挤,建议把批量拉取任务安排在 01:00–07:00。最短路径:3 步跑通加速拉取1. 确认镜像在白名单内完成这一步之前,后面都免谈。仓库自带校验脚本,镜像名去掉 tag 再传入:bash hack/verify-allows.sh allows.txt docker.io/prom/node-exporter echo $?完成上一步后,你应该看到退出码0(在白名单);非 0 说明不在,拉取会直接失败。2. 加前缀拉取前缀替换是最推荐的方式:docker pull m.daocloud.io/docker.io/prom/node-exporter:v1.8.2完成上一步后,你应该看到几秒内开始下载 layer,而不是先挂起几十秒再断流。docker.io/library/busybox这类短写法对应的完整地址是m.daocloud.io/docker.io/library/busybox。3. 用 digest 对齐源站做验收docker inspect --format{{.Id}} m.daocloud.io/docker.io/prom/node-exporter:v1.8.2与源站同 tag 的 digest 一致,说明内容未被改动,可以进入生产配置阶段。 按使用方分层配置:宿主机、K8s、CI 各一份最小改动Docker 宿主机全局生效在/etc/docker/daemon.json增加 registry-mirrors,然后systemctl restart docker:{ registry-mirrors: [https://docker.m.daocloud.io] }注意registry-mirrors只对 docker.io 生效;gcr.io、ghcr.io 等其他源需要单独处理,不要把 docker.io 之外的源站域名塞进这个字段。K8s 集群内单 Pod 切换只改要切换的 workload 的 image 字段,不动其他配置:containers: - name: node-exporter image: m.daocloud.io/docker.io/prom/node-exporter:v1.8.2 # 其余配置保持不变只发这一个文件的变更,改配置、发 PR、走 review,比集群级 Webhook 的风险小得多。kubeadm 装集群时同理,把imageRepository指到k8s.m.daocloud.io即可,kind 起本地集群则直接kind create cluster --image m.daocloud.io/docker.io/kindest/node:v1.22.1。CI 流水线临时切换构建机不需要改宿主机全局配置,在拉取步骤前替换前缀即可:registrym.daocloud.io docker pull ${registry}/docker.io/gitlab/gitlab-runner:latestContainerd 节点Containerd 不读 daemon.json,在/etc/containerd/config.toml的[plugins.io.containerd.grpc.v1.cri.registry]下为每个源站单独写 host。这张配置的结构可以参考 containerd 官方文档 hosts.md 的 Registry Host Namespace 一节;gcr.io 对应gcr.m.daocloud.io、ghcr.io 对应ghcr.m.daocloud.io,不要把别的源域名错配给 docker.io。⚠️ 进阶技巧与常见坑版本标签怎么选可变 tag 更新后,Manifest 内存缓存 1 小时,期间可能先拉到旧内容,之后后台才重新同步;digest 方式最稳,因为懒加载机制保证 sha256 与源一致。建议顺序:优先sha256:digest,其次明确版本号,最后才考虑latest这类可变 tag。缓存 30 天过期与 404 窗口什么情况下遇到:镜像 30 天内没被拉过,缓存已过期。怎么判断:拉取报 404 或卡住。怎么处理:blob 内存缓存只有 1 分钟,等过期重试即可;反复出现的镜像建议用 digest 固定版本。拉取失败的排查顺序怎么判断:先跑 hack/verify-allows.sh 确认白名单,再看docker pull的返回码。404 多为白名单缺失或缓存过期;拉取卡住多为高峰期排队,README 建议的闲时(凌晨 01:00–07:00)重试。怀疑内容不一致时,用 inspect 对比 digest:加速侧和源站一致,说明问题出在源站或网络,不在 mirror。效果与验证场景直连源站走镜像加速说明单镜像拉取(约 200MB)数小时,常中断数分钟闲时拉取批量部署 20 个镜像排队加重试,半天级10 分钟内高峰时段差异更大新集群 kubeadm 组件卡死在组件镜像正常完成kubeadm 镜像走 k8s.m.daocloud.io以上为国内办公网与家庭宽带的实测量级,镜像以 100~300MB 为主;高峰时段(北京时间 07:00 后)直连侧差异更明显,仅供参考。交付验收可以直接复用前文的 digest 对比:docker inspect --format{{.Id}},两侧一致即内容无误。相关资源allows.txt:镜像同步白名单,拉取失败先查这里hack/verify-allows.sh:白名单校验脚本,退出码 0 表示命中hack/correct-image.sh:把镜像地址规范化成registry/namespace/repo:tag形式hack/verify-image-match.sh:校验 allows 白名单行的匹配一致性docs/local-cache/:内网缓存部署文档,内网环境可在此基础上再套一层本地 registryContainerd 的 Registry Host Namespace 写法:参考 containerd 官方文档 hosts.md【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表