tutorial

DigitalOcean DOCR AI 镜像教程:区域镜像与 SOCI 延迟加载

DigitalOcean Container Registry 已提供区域 AI 镜像和 SOCI 延迟加载。本文介绍 PyTorch 镜像路径、11 个可用区域、Docker 登录拉取、SOCI 配置验证与常见回退问题。

DigitalOcean DOCR AI 镜像教程:区域镜像与 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/pytorch24.05-py326.03-py326.04-py326.05-py3没有 latest,必须指定版本标签
rocm/pytorchlatest镜像按同步周期更新,可能晚于上游 latest

区域镜像当前覆盖 nyc3atl1sfo2sfo3tor1lon1ams3fra1blr1sgp1syd1。仓库命名格式为:

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 amd64 Droplet 或 GPU 节点;
  • containerd 1.4 或更高版本;
  • root 权限、fusenerdctl 1.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,并根据部署区域、权限隔离和镜像生命周期规划注册表。