访问镜像仓库
仓库(Repository)是集中存放镜像的地方。注册服务器(Registry)是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。
智算云平台提供 Docker Registry 服务,为租户在每个可用区提供镜像仓库服务。
Docker Hub
由于运营商网络原因,直接从 Docker Hub(docker.io)拉取镜像时会失败。这包括:
- 未指定 Registry 前缀的拉取命令(默认使用
docker.io) - 显式指定
docker.io或registry-1.docker.io的拉取命令
# 登录实例后执行 pull
# 先检查本地是否存在指定的镜像 不存在就从 docker.io 下载
root@is-daieztsmaipd2smo-devmachine-0:~# docker pull ubuntu:22.04
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)建议您在生产环境中谨慎使用 Docker Hub 容器镜像。可改为从智算云平台的镜像中心拉取预置镜像,或拉取租户私有仓库中的自定义镜像。
提示
智算云平台不提供官方加速服务。您可以自行使用第三方镜像加速服务。Docker 容器服务支持修改配置,详见 Dockerctl。
列出平台预置镜像
在极值算力实例的终端中运行以下命令,可以列出该极值算力实例所属可用区提供的所有平台预置镜像。
另一种方式是在镜像中心查看平台预置镜像。两种方式各有优势:
- Shell 命令方式:在极值算力实例内直接查看该可用区的平台预置镜像
- 镜像中心 UI:可查看所有可用区的平台预置镜像和租户自定义镜像
警告
该命令仅可在极值算力实例的终端中运行,不支持在其他随意的 Shell 终端中执行。列出的镜像仅为极值算力实例所属可用区提供的平台预置镜像,不支持列出租户自定义镜像。
如果您不确定当前极值算力实例所属可用区提供了哪些平台预置镜像,使用此命令可以快速验证和查看可用镜像列表。
# 1. Setup Colors & Auth
C_GREEN="\033[1;32m"
C_CYAN="\033[1;36m"
C_MAGENTA="\033[1;35m"
C_RESET="\033[0m"
export PROJECTS="infini-ai infini-maas"
read REGISTRY AUTH <<< $(jq -r '.auths | to_entries | first | "\(.key) \(.value.auth)"' "$DOCKER_CONFIG/config.json")
# 2. Loop through each Project
for PROJ in $PROJECTS; do
# Pick a distinct color based on project name
if [[ "$PROJ" == "infini-ai" ]]; then
P_COLOR=$C_CYAN
else
P_COLOR=$C_MAGENTA
fi
echo -e "\n\n${P_COLOR}####################################################${C_RESET}"
echo -e "${P_COLOR} SCANNING PROJECT: $PROJ ${C_RESET}"
echo -e "${P_COLOR}####################################################${C_RESET}"
# 3. Loop through Pages 1 to 10
for PAGE in {1..10}; do
# Fetch Repos
REPOS=$(curl -s -H "Authorization: Basic $AUTH" \
"https://$REGISTRY/api/v2.0/projects/$PROJ/repositories?page_size=100&page=$PAGE" \
| jq -r '.[] | .name? // empty')
# Stop if page is empty
if [[ -z "$REPOS" ]]; then
break
fi
# 4. Process Images
echo "$REPOS" | while read repo; do
echo -e "\n--------------------------------"
# Print Full Image URL (Registry + Repo)
echo -e "IMAGE: ${C_GREEN}$REGISTRY/$repo${C_RESET}"
# Fetch tags -> Sort
curl -s -H "Authorization: Basic $AUTH" \
"https://$REGISTRY/v2/$repo/tags/list" \
| jq -r '.tags[]? // "No tags found"' \
| sort -V
done
done
done拉取平台预置镜像
在通过列出平台预置镜像命令或镜像中心查看可用镜像后,您可以获取镜像地址,使用 docker pull 拉取所需的平台预置镜像。
提示
本文中的平台预置镜像地址是示例。使用前,请在镜像中心或当前实例的预置镜像列表中确认当前可用区提供了对应仓库及 tag;如果列表中不存在,请改用页面显示的可用镜像地址。替换 Registry 域名并不能保证相同仓库或 tag 在其他环境或可用区中存在。
例如,拉取平台预置的 Ubuntu 镜像:
docker pull cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429拉取平台预置的 CUDA 镜像:
#拉取平台预置的 CUDA 镜像
docker pull cr.infini-ai.com/infini-ai/cuda:12.2.2-cudnn8-devel-ubuntu20.04下一步可参考启动容器使用该镜像运行容器。
信息
- 由于运营商网络限制,会导致您拉取 Docker Hub 镜像时下载失败。您可以自行使用第三方镜像加速服务。
- 您可以自行修改 Docker 配置,详见 Dockerctl。
租户私有镜像仓库
平台提供租户私有镜像仓库服务。
- 私有镜像仓库服务可用于存放租户的自定义镜像,供极值算力实例、任务、推理服务等平台服务使用。
- 购买包年包月计算资源、按量计费计算资源的租户,均可获得私有镜像仓库服务和免费存储空间。
- 租户可在多个可用区获得私有镜像仓库服务,可用区之间镜像仓库存储、网络相互独立。
- 平台镜像服务以租户 ID 为 Docker Registry 上的命名空间,构建租户镜像仓库根路径。
警告
cr.infini-ai.com 是平台内部 Registry 域名,各可用区的平台实例都使用这个相同的域名,但访问的是各自可用区中独立的 Registry。从可用区 A 的平台实例访问时,该域名连接到可用区 A 的 Registry;从可用区 B 的平台实例访问时,同一域名连接到可用区 B 的 Registry。
因此,即使完整镜像地址和 tag 相同,不同可用区中的镜像也相互独立,不会自动同步,并且可能对应不同的镜像摘要。完整镜像地址不会显示实际访问的是哪个可用区;请在镜像中心的自定义镜像列表中查看 可用区 列。
地址选择、登录方式、凭证范围和跨可用区迁移方法,参见镜像仓库地址与可用区。
登录租户私有镜像仓库
登录租户私有镜像仓库,指通过平台内部 Registry 域名访问当前实例所在可用区的 Registry。请先确认极值算力实例已开启 Docker 容器 功能,再按照本页显示的登录方式操作。
直接使用平台预置凭证
通过已开启 Docker 容器 功能的极值算力实例访问当前可用区 Registry 时,平台已为 Docker CLI 配置登录凭证。正常情况下,无需手动运行 docker login,可直接执行 docker pull 或 docker push。
如需确认凭证记录是否存在,可运行以下命令。该命令只检查平台内部 Registry 域名对应的记录,不输出配置文件中的认证内容。
DOCKER_CONFIG_FILE="${DOCKER_CONFIG:-/tmp/docker-config}/config.json"
jq -e --arg registry "cr.infini-ai.com" '
(.auths // {}) as $auths
| ($auths | has($registry))
or ($auths | has("https://" + $registry))
or ($auths | has("http://" + $registry))
' "$DOCKER_CONFIG_FILE" >/dev/null \
&& echo "Registry credential ready"如果已经执行过 docker logout cr.infini-ai.com,请重启极值算力实例。重启后,平台会重新写入 Registry 凭证,无需手动运行 docker login。该凭证只适用于当前实例所在可用区,不表示已经登录其他可用区。
获取租户镜像仓库根路径
完成本页对应的登录操作后,使用租户 ID构建当前可用区的租户镜像仓库根路径:
export TENANT_ID="te-xxxxxxxxxxxxxxxx"
export CURRENT_ZONE_REPO_ROOT="cr.infini-ai.com/$TENANT_ID"
echo "$CURRENT_ZONE_REPO_ROOT"如果只需要检查远程镜像、添加 tag 或在 Registry 之间传输镜像,也可以让 crane 复用 Docker 兼容的当前可用区凭证,不需要先把镜像拉取到本地 Docker 镜像存储。
推送至租户私有镜像仓库
通过已开启 Docker 容器 功能的极值算力实例,可将镜像推送至当前实例所在可用区的租户私有镜像仓库,作为自定义镜像。
镜像来源可以为:
- 极值算力实例内构建的镜像(
docker build/docker commit) - 极值算力实例内拉取的镜像(
docker pull) - 极值算力实例内导入的镜像(
docker save/docker load)
警告
以下命令会把镜像写入当前实例所在可用区的 Registry。如果目标是其他可用区,请不要使用平台内部 Registry 域名;请改用镜像中心提供的目标可用区 Registry 公网访问地址和登录凭证。
推送前,请先按照登录租户私有镜像仓库完成当前可用区 Registry 的登录准备,并设置 CURRENT_ZONE_REPO_ROOT。
# 拉取 quay.io 的镜像作为示例
docker pull quay.io/coreos/etcd:v3.5.5
# 修改镜像标签:使用当前可用区租户镜像仓库根路径 + 仓库名(Repository)
docker tag quay.io/coreos/etcd:v3.5.5 $CURRENT_ZONE_REPO_ROOT/etcd:v3.5.5
# 推送镜像至命名空间(Namespace)
docker push $CURRENT_ZONE_REPO_ROOT/etcd:v3.5.5操作演示
终端录制
推送镜像到租户私有仓库
适用于把实例内镜像发布到当前实例所在可用区的租户私有镜像仓库。
信息
- 如果您有镜像 tar 包,可上传至极值算力实例后使用
docker load加载镜像,再推送到租户镜像仓库。详见导入镜像 Tar 包。 - 从平台外部推送镜像或跨可用区迁移镜像时,必须使用镜像中心提供的目标可用区 Registry 公网访问地址。详见导入或跨可用区迁移镜像。
常见问题
无法拉取 Docker Hub 镜像
由于运营商网络原因,会导致您拉取 Docker Hub 镜像时下载失败。建议您在生产环境中谨慎使用依赖于 Docker Hub 的容器镜像。
无法推送镜像至租户私有镜像仓库
请检查极值算力实例是否已启用「Docker 容器」功能。如需查看当前状态,可在极值算力「容器实例」页面找到目标实例,在「配置信息」列将光标悬浮在详情上,在悬浮窗口的高级配置中查看 docker容器;如未启用,可在「操作」栏点击「改配」开启。
如果曾执行 docker logout cr.infini-ai.com 或凭证记录已丢失,请重启实例,等待平台重新写入凭证后再试。正常情况下,不需要手动运行 docker login。
租户私有镜像仓库有存储空间限制。详见租户私有镜像仓库。
如何处理镜像构建失败
如果镜像中心显示构建失败,可尝试以下流程:
- 在镜像中心查看构建日志。
- 如果使用 Dockerfile 构建,可尝试更换为在极值算力实例中构建镜像,以获取更详细的日志。详见使用极值算力实例构建镜像
如果问题持续,请联系商务或售后服务。
如何从公网推送镜像
cr.infini-ai.com 是平台内部 Registry 域名,不是公网访问入口。如需从平台外部推送镜像,请使用镜像中心提供的目标可用区 Registry 公网访问地址与登录凭证,并根据镜像中心给出的命令打标签与推送。