DigitalOcean DOCR AI 镜像教程:区域镜像与 SOCI 延迟加载
DigitalOcean Container Registry 已提供区域 AI 镜像和 SOCI 延迟加载。本文介绍 PyTorch 镜像路径、11 个可用区域、Docker 登录拉取、SOCI 配置验证与常见回退问题。
DigitalOcean 于 2026 年 8 月 10 日为 DigitalOcean Container Registry(DOCR)上线了区域 AI 镜像仓库,并为这些镜像提供 SOCI 延迟加载支持。GPU Droplet、DOKS 节点或普通 Droplet 可以从同一区域拉取 PyTorch 镜像,减少跨区域下载和上游镜像仓库限流带来的等待。
本教程说明可用镜像、区域、登录与拉取命令,以及如何判断 SOCI 是否真的在延迟加载。示例中的区域和标签需要按实际基础设施替换。
DOCR Mirror Registries 是什么?
- 由 DigitalOcean 维护的只读区域镜像仓库,所有 DigitalOcean 客户共享。
- 镜像拉取保持在基础设施所在区域,避免依赖上游仓库的拉取限额。
- 不需要订阅私有 Container Registry 套餐,镜像也不计入个人注册表存储空间。
- 需要具有 registry read 权限的 DigitalOcean Personal Access Token 才能拉取。
- 当前镜像均为
linux/amd64,ARM 主机需要显式指定平台,且不能原生运行该架构镜像。
当前镜像与区域
| 镜像 | 可用标签 | 注意事项 |
|---|---|---|
nvidia/pytorch | 24.05-py3、26.03-py3、26.04-py3、26.05-py3 | 没有 latest,必须指定版本标签 |
rocm/pytorch | latest | 镜像按同步周期更新,可能晚于上游 latest |
区域镜像当前覆盖 nyc3、atl1、sfo2、sfo3、tor1、lon1、ams3、fra1、blr1、sgp1 和 syd1。仓库命名格式为:
registry.digitalocean.com/docr-mirror-<region>-registry/<image>:<tag>
登录区域镜像仓库
先创建只授予 registry read 权限的 Personal Access Token,并通过环境变量传入。不要把令牌写入文章、镜像或 Git 仓库。
export DIGITALOCEAN_TOKEN="<your-registry-read-token>"
printf '%s' "$DIGITALOCEAN_TOKEN" | docker login registry.digitalocean.com \
--username "$DIGITALOCEAN_TOKEN" \
--password-stdin
使用 nerdctl 时可以用相同的 registry 地址和令牌登录。
使用 Docker 拉取 AI 镜像
下面以 NYC3 的 NVIDIA PyTorch 镜像为例。生产环境应选择与 Droplet 或 Kubernetes 节点相同或最近的镜像区域。
docker pull \
registry.digitalocean.com/docr-mirror-nyc3-registry/nvidia/pytorch:26.05-py3
NVIDIA PyTorch 完整镜像约为 8.5 GB。普通 Docker pull 会在启动容器前下载全部层。如果主要目标是缩短首次启动等待时间,可以使用 SOCI 延迟加载。
SOCI 延迟加载需要什么?
SOCI(Seekable OCI)允许兼容的 containerd 运行时先获取索引和少量元数据,在容器运行时按需流式读取镜像层。主机需要满足:
- Linux
amd64Droplet 或 GPU 节点; containerd1.4 或更高版本;- root 权限、
fuse、nerdctl1.6.0 或更高版本; - 已安装并运行 SOCI snapshotter,并在 containerd 中注册代理插件。
Rootless nerdctl 不支持此 SOCI 流程。如果 snapshotter 未安装或没有运行,nerdctl --snapshotter soci pull 可能静默回退为完整下载,因此必须先验证配置。
验证并拉取 SOCI 镜像
按照 DigitalOcean 官方文档安装 snapshotter、配置 systemd 服务并在 /etc/containerd/config.toml 注册 soci 后,执行:
sudo nerdctl system info | grep -i storage
ls /run/soci-snapshotter-grpc/soci-snapshotter-grpc.sock
存储插件列表应包含 soci,且 socket 文件必须存在。随后执行延迟拉取:
sudo nerdctl --snapshotter soci pull \
registry.digitalocean.com/docr-mirror-nyc3-registry/nvidia/pytorch:26.05-py3
成功的延迟拉取只先获取索引和元数据,通常在数秒内完成;nerdctl images 可能显示本地大小为 0B,这是镜像层尚未完整下载的正常表现。
运行 GPU 验证
sudo nerdctl --snapshotter soci run --rm --gpus all --network host \
registry.digitalocean.com/docr-mirror-nyc3-registry/nvidia/pytorch:26.05-py3 \
python -c "import torch; print(torch.cuda.is_available())"
如果返回 True,说明容器可以访问 NVIDIA GPU。若拉取仍然很慢或变成完整下载,请检查 snapshotter 服务状态、containerd 代理插件配置以及命令中的 --snapshotter soci。
使用建议
- 固定 NVIDIA 镜像版本标签,不要自行假设存在
latest。 - 对生产工作负载记录镜像完整路径与 digest,避免同步更新造成不可预期变化。
- 镜像仓库是只读共享镜像源;自己的 SOCI 镜像应推送到个人 DOCR。
- 令牌仅授予读取权限,并通过密钥管理或 CI/CD secret 注入。
官方资料与下一步
完整安装步骤、版本要求和故障排查以 DOCR Mirror Registries 官方教程和 DigitalOcean Recent Release Notes为准。
需要存储自己的私有容器或 SOCI 镜像时,可查看 DigitalOcean Container Registry,并根据部署区域、权限隔离和镜像生命周期规划注册表。
