资讯动态

Zot 镜像同步实战:从定时到按需,3种方式打通跨区域镜像分发

发布时间:2026/10/21 1:52:32 来源:尧图企业网站定制
Zot 镜像同步实战从定时到按需3种方式打通跨区域镜像分发【免费下载链接】zotzot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification)项目地址: https://gitcode.com/GitHub_Trending/zo/zotZot 是一个纯基于 OCI Distribution Specification 的容器镜像/制品仓库内置的 sync 扩展可以让它充当远程仓库的镜像网关远程仓库里有新镜像时Zot 按你定的规则拉过来存到本地。读完这篇文章你能独立写出一份同步配置在定时、按需、流式三种模式之间做选择并用前缀和标签规则精确控制同步范围避免把整个上游仓库无脑搬进本地存储。同步扩展如何启用最小配置长什么样这一节解决配置从哪开始写的问题。Zot 的同步逻辑挂在extensions.sync节点下一份最小可用的同步配置如下{ extensions: { sync: { enable: true, credentialsFile: ./examples/sync-auth-filepath.json, registries: [ { urls: [https://registry1:5000], pollInterval: 6h } ] } } }它解决的是三件事打开开关enable、指向上游凭证文件credentialsFile、声明要同步哪些上游仓库registries。凭证文件是普通的 JSONkey 为仓库地址value 是账号密码{ registry2:5000: { username: user2, password: pass2 } }⚠️ 如果上游仓库需要鉴权漏配凭证会导致同步静默失败。完整示例可以对照 config-sync.json配置结构定义在 pkg/extensions/config/sync/ 里字段名以那里的类型为准。定时同步还是按需同步两种触发机制怎么选这一节解决什么时候拉镜像的问题。Zot 支持三种模式可以按场景组合定时同步Periodic默认行为。设置pollInterval后Zot 周期性轮询上游仓库把新增的镜像拉下来。适合镜像集相对稳定、要求本地随时可拉取的场景。按需同步On-Demand设置onDemand: true。客户端请求本地没有的镜像时Zot 才临时去上游取。存储只会被实际拉过的镜像占用适合上游镜像数量巨大但访问稀疏的场景。流式同步Stream在按需基础上更进一步Zot 边从上游下载边把数据转发给客户端不等本地落盘完成。首次拉取就更快代价是与按需同步的某些重试参数互斥详细约束见 流式同步说明。还有一个折中选项onDemandInBackground。开启后请求缺失镜像时 Zot 立即返回 404同步在后台进行镜像就绪后的请求才成功。适合不希望请求方长时间等待、可以接受短暂 404 的网关场景。模式触发时机存储占用适用场景定时pollInterval 轮询全量受过滤规则约束镜像集小、要求本地秒拉按需客户端首次请求仅被拉过的镜像上游镜像多、访问稀疏流式客户端首次请求边下边传同步完成后落盘对首次拉取延迟敏感只同步需要的仓库和标签content 规则怎么写这一节解决怎么不把上游整个搬空的问题。content数组是过滤规则的核心每条规则由prefix仓库前缀支持**通配、tags标签规则和可选的路径转换参数组成content: [ { prefix: /repo1/repo, tags: { regex: 4.*, semver: true } }, { prefix: /repo4/**, tags: { excludeRegex: .*-(amd64|arm64)$ } } ]它解决的是白名单 标签过滤只有prefix命中的仓库会被同步标签再经过regex匹配才保留、excludeRegex匹配则剔除、semver只保留语义化版本 tag三道筛选。规则由 ContentManager 统一解释前缀匹配用的是 glob 语法所以**可以覆盖整个命名空间下的所有子路径。同步路径与上游不一致destination 和 stripPrefix 怎么配这一节解决本地仓库名想和上游不一样的问题。上游的命名空间往往带着环境或团队前缀直接同步过来会让本地路径又长又乱。下面这段配置把上游repo2/repo改写成本地的repo{ prefix: /repo2/repo, destination: /repo, stripPrefix: true }不设置stripPrefix时destination作为前缀拼在原始仓库名前面等于加一层命名空间。设置stripPrefix: true后prefix部分会被剥掉上游repo2/repo落到本地repo层级关系保持不变。 按需同步也复用同一套规则本地仓库名会被反向映射回上游仓库名所以两种模式必须用同一份content规则定时和按需的改写行为才一致。重试与限速让同步在网络抖动时不翻车这一节解决上游不稳定、限流、大镜像拉不动的问题。上游仓库尤其是 index.docker.io 这类公共仓库经常限流参数集中在registries每个条目上参数作用maxRetries/retryDelay失败重试次数与基础间隔maxRetryDelay重试退避上限syncTimeout单次同步操作的总超时reqConcurrent每个上游主机的在途请求数上限reqPerSec每个上游主机的请求速率上限disableHTTP2/maxIdleConnsPerHost控制连接复用与 HTTP/1.1 并发⚠️ 按需同步做高并发代理拉取时reqConcurrent和disableHTTP2通常要一起调只调前者请求仍挤在同一条 HTTP/2 连接上只调后者并发数还会被默认的 3 个连接卡住。进阶多架构镜像只拉要的平台这一节解决multi-arch 镜像白白占满磁盘的问题。给 registry 或 content 规则配platforms白名单定时同步 multi-arch index 时只会复制列表中声明的子镜像index 的 digest 保持不变未选中的平台保持缺失sparse 状态{ prefix: /repo4/**, platforms: [linux/amd64] }如果业务只跑 x86这样配置就能省掉一半以上的存储空间。content 级设置会覆盖 registry 级默认值按需同步则不受该列表限制客户端要哪个平台才补哪个平台。更多机制细节可以看 稀疏 multi-arch 同步说明。下一步从零跑通参考 examples/README.md 里的同步示例逐个验证。云端鉴权需要 ECR/GCP 这类凭证助手时看 sync 扩展配置 中credentialHelper与oauth2CredentialHelper的定义示例配置在 config-sync.json 同目录的 sync 相关配置文件中。行为验证端到端的同步测试在 test/blackbox/sync.bats 里可以作为配置正确性的对照。【免费下载链接】zotzot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification)项目地址: https://gitcode.com/GitHub_Trending/zo/zot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑