public-image-mirror 拉取镜像时如何选择 sha256 摘要、固定版本 tag 与 latest 引用方式
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
在 public-image-mirror 中拉取镜像时,同一个镜像有三种引用写法:@sha256:摘要、明确版本号的 tag、以及latest这类可变 tag。三种写法在这套镜像服务上的同步与缓存行为不同,直接影响你能否拉取到预期的镜像内容。项目 README 给出的建议优先级是:
建议优先使用
@sha256:指定镜像, 其次使用明确版本号的 tag, 最后才考虑 latest 这种可变 tag, 其变更后会响应旧数据, 并且后台重新同步
下面先确定地址写法,再给出三种引用形式的命令,最后列出拉取后可能遇到的现象及其文档给出的原因。
先选地址形式:加前缀(推荐)与前缀替换
拉取时要把镜像地址指向镜像服务。项目提供两种写法,加前缀是推荐方式:保留源站完整地址,在前面加上m.daocloud.io/。README 中的映射示例如下:
docker.io/library/busybox | V m.daocloud.io/docker.io/library/busybox前缀替换不推荐:把源站域名换成人工配置的镜像域名,例如(完整表见 README):
| 源站 | 替换为 | 备注 |
|---|---|---|
| docker.io | docker.m.daocloud.io | |
| gcr.io | gcr.m.daocloud.io | |
| registry.k8s.io | k8s.m.daocloud.io | |
| k8s.gcr.io | k8s-gcr.m.daocloud.io | k8s.gcr.io 已被迁移到 registry.k8s.io |
前缀替换的列表是人工配置的,README 写明"有需求提 Issue",并且特别提醒:这里每一个源站内容都是不同的,不要把 docker.io 之外的站点配置给 docker 的registry-mirrors。
三种引用形式怎么写进命令
以下命令均为项目 README 中的示例或按 README 规则拼装。
1.@sha256:摘要(第一优先)
文档只给出@sha256:这一引用形式,未列具体摘要值。由于"所有 hash(sha256) 均和源保持一致 (懒加载机制)",源站镜像的摘要通过镜像拉取时同样有效,摘要值需要你从源站获取后填入:
# <digest> 替换为源镜像实际的 sha256 摘要值(项目文档未提供具体值) docker pull m.daocloud.io/docker.io/library/nginx@sha256:<digest>2. 固定版本 tag(第二优先)
README 的 kind 加速示例就是一个带固定版本 tag 的镜像地址:
kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1这里v1.22.1是明确版本号,写法模式即m.daocloud.io/<源站>/<镜像>:<版本号 tag>。
3. latest 等可变 tag(最后才考虑)
项目的快速开始命令没有指定 tag,属于可变 tag 这一档:
docker run -d -P m.daocloud.io/docker.io/library/nginx它是 README 给出的最小用法,作为首次拉取没有问题;但按建议优先级,它排在最后,长期复用或要求内容确定的场景应改用摘要或版本 tag。
为什么摘要最稳、tag 次之、latest 最靠后
README 给出的机制说明有三条:
- 本服务仅是源镜像仓库 (Registry) 的 Mirror,所有 hash(sha256) 均和源保持一致(懒加载机制);
- Manifest 内存缓存 1 小时,所以 tag 被更新了 1 小时之后才会同步新的;
- latest 这类可变 tag 变更后会响应旧数据,并且后台重新同步。
也就是说:按摘要引用时,指向的内容与源站一致;源站更新了可变 tag 之后,由于 Manifest 缓存 1 小时,最长 1 小时内镜像仍返回旧数据,并会在后台重新同步。这就是 latest 档排在最后的原因。
拉取后的现象与文档给出的原因
| 现象 | 文档说明的原因 |
|---|---|
| 之前拉取过的镜像一段时间(约 30 天)后需要重新同步 | 缓存的内容只保留 30 天, 过期后会需要重新同步 |
| 源站已更新 tag,但镜像仍返回旧内容 | Manifest 内存缓存 1 小时,tag 更新 1 小时之后才会同步新的;可变 tag 变更后"会响应旧数据, 并且后台重新同步" |
| 拉取报错 404 | Blob 内存缓存 1 分钟,在期间如果 blob 到达 30 天期限被删除,会导致报 404 |
拉取任务的时间选择上,README 建议将拉取任务放在闲时,即北京时间 01-07 点,其他时间段非常拥挤。项目另提供同步队列与服务状态监控入口(见 README),同步队列仅保留一小时的同步记录。
边界与下一步
- 以上三种引用形式的行为差异只与镜像服务的同步机制有关,与镜像本身无关;文档没有给出针对某一镜像的单独判定标准,选择时按"摘要 > 固定版本 tag > 可变 tag"的优先级即可。
- 如果需要在内网环境中进一步缓存这些镜像、减少对外网依赖,项目提供了独立的内网缓存部署方案,见 docs/local-cache/README.md,那是一个单独的部署任务,不是本文引用方式选择的必要步骤。
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考