> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siflow.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 镜像仓库

Siflow 将提供专用的镜像仓库，使用户能够在平台上享受集成、高性能的镜像使用体验。

对于在 Siflow 注册的租户，平台将自动创建一个以租户命名的镜像仓库项目。该租户的所有镜像都将存储在该项目下。每个租户的镜像仓库存储容量有限。

## 预置镜像

### NVIDIA Nemo

NVIDIA NeMo™ 是一个端到端平台，可随时随地开发自定义生成式 AI 模型。NVIDIA NeMo 框架专为企业级开发而设计，它利用 NVIDIA 最先进的技术，从自动化分布式数据处理，到使用复杂的 3D 并行技术训练大规模定制模型，最终使用检索增强生成在您选择的基础设施（无论是本地还是云端）上进行大规模推理，从而实现完整的工作流程。

对于将业务运行在 AI 之上的企业，[NVIDIA AI Enterprise](https://www.nvidia.com/en-us/data-center/products/ai-enterprise/) 提供了一个生产级、安全、端到端的软件平台，其中包括 NeMo 以及生成式 AI 参考应用程序和企业支持，以简化采用流程。现在，各组织可以将 AI 集成到其运营中，简化流程、增强决策能力，并最终创造更大的价值。

## 构建自定义镜像

当预配置镜像无法满足您的需求时，您可以在平台内按需构建自定义镜像。每个镜像可以包含多个镜像版本。

### 镜像管理规范

1. 镜像 URL 必须遵循以下格式规范：`<harbor_url>/<project_name>/<name>:<version>-<commit_id>`
   1. harbor\_url：由平台根据用户选择的地域进行配置，不可修改
   2. project\_name：由平台配置，默认为租户名称，不可修改
   3. name：镜像名称
   4. version：镜像版本
   5. commit\_id：镜像标签
2. 为节省镜像仓库空间，同名同版本的镜像最多可以有 3 个标签版本
3. 在开发环境、任务训练和模型服务等模块中选择镜像时，仅允许基于 name + version 进行选择，默认选择最近提交的标签

### 自定义镜像基本信息配置

| 参数名称        | 是否必填 | 参数说明                                                                                                                                          |
| ----------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Region      | 是    | 资源所在的地域                                                                                                                                       |
| Cluster     | 是    | 资源所在的集群                                                                                                                                       |
| Name        | 是    | 设置镜像名称，支持 2 到 64 个可见字符，仅包含小写字母、数字、连字符和下划线。不能以连字符或下划线开头或结尾，且不允许空格、冒号、@ 等                                                                       |
| Version     | 是    | 设置镜像版本以启用同一镜像的多版本管理。<br /> 支持 1 到 64 个可见字符，包括字母、数字、连字符和下划线。不支持以连字符或句点开头，不支持空格、冒号、斜杠、@ 或其他特殊符号                                                 |
| CommitID    | 是    | 设置镜像 CommitID 以启用同一镜像版本的迭代升级。<br />建议使用代码仓库提交 ID 的前 8 个字符作为 CommitID。<br />支持 1 到 64 个可见字符，包括字母、数字、连字符和下划线。不支持以连字符或句点开头，不支持空格、冒号、斜杠、@ 或其他特殊符号 |
| Class       | 是    | 设置镜像类别，如 pytorch、base、python、LLM 等，以对镜像进行分类管理                                                                                                 |
| Size        | 是    | 设置镜像大小                                                                                                                                        |
| Description | 否    | 镜像内容详情的描述                                                                                                                                     |

### 基于已有镜像

以下介绍如何通过安装额外的依赖项，基于预配置镜像构建新的自定义镜像。基于自定义镜像、平台内置镜像或公网镜像构建新镜像的步骤类似。

1. 在 \[自定义镜像] 创建页面，选择 `Based on an existing image`、`Preset`。

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image1.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=fb9d83d5eae7968b99a3f6f055d03eae" alt="image" width="1736" height="492" data-path="products/siverse/media/image/image1.png" />

2. 基于该基础镜像选择不同的安装方式和具体的依赖版本。例如，如果您想在基础镜像中安装 vim，请选择 apt 安装方式，并在相应的输入框中输入 "vim"。如果您希望安装 Python3 相关的依赖包，请选择 pip3 并输入相应的包名和版本。

* pip2 和 pip3 分别对应 Python2 和 Python3 依赖的安装方式，通常不会同时安装
* apt 和 yum 分别是 Ubuntu 和 CentOS 依赖的包安装方式，通常不会同时安装

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image2.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=74255a9ca440f6be3809bdb350075754" alt="image" width="1280" height="541" data-path="products/siverse/media/image/image2.png" />

您也可以通过命令 upload xx.txt 导入 apt 和 pip 所需的信息。

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image3.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=ee2fc294894534adae8279ed6e0823ec" alt="image" width="1280" height="680" data-path="products/siverse/media/image/image3.png" />

其中，apt.txt 和 pip.txt 是 txt 格式的文本文件，内容格式如下：

* apt.txt

```
python3=3.8.2-0ubuntu2
python3-pip=20.0.2-5ubuntu1.11
curl=7.68.0-1ubuntu2.25
wget=1.20.3-1ubuntu2.1
```

* pip.txt

```
requests==2.31.0
flask==2.3.3
```

3. 完成基础镜像和依赖项的配置后，提交表单即可开始构建自定义镜像

### 基于 Dockerfile

Dockerfile 是用于构建镜像的文本文件，包含一系列镜像构建指令。有关 Dockerfile 语法的详细信息，请参阅其官方文档。用户只需在自定义镜像创建页面选择 "Based on Dockerfile"，并按照规范编写 Dockerfile，即可触发自定义镜像构建。以下是一个 Dockerfile 示例：

```bash theme={null}
FROM ubuntu:18.04

RUN apt-get update && apt-get install -y --no-install-recommends \
        python3-pip \
        vim && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/*

RUN pip3 install\
        numpy==1.19.5 \
        scipy==1.5.4

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
```

构建参数：构建镜像时，如果您需要动态传递参数以在构建过程中使用（将其注入到 Dockerfile 中）

如果您需要使用 apt 或 pip 安装相应的组件，可以直接在 Dockerfile 中使用命令进行安装，也可以通过 txt 文件添加。添加后，将返回相应的命令；只需复制并粘贴到 Dockerfile 中的适当位置即可

**注意：** 当前不支持将内容复制到您的共享目录中

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image4.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=fc0bb4383782d836480c8e33b00b6465" alt="image" width="1280" height="759" data-path="products/siverse/media/image/image4.png" />

### 从第三方库导入

支持将官方公共镜像仓库和云服务商镜像仓库中的公共镜像同步到 Siflow 的镜像仓库。

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image5.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=d3576f7ce13f6a365005b9b7fcdab68f" alt="image" width="1487" height="317" data-path="products/siverse/media/image/image5.png" />

### 导入已有镜像

如果某个镜像不是使用平台构建的——例如直接使用 Docker 构建并推送到镜像仓库——那么它将无法在平台内被选择。在这种情况下，可以使用此方法将镜像注册到平台，以便在其他功能中更方便地使用

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image6.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=699c248bd8ed9f01272f3f3b8fd2c7bf" alt="image" width="1488" height="363" data-path="products/siverse/media/image/image6.png" />

## 镜像

<img src="https://mintcdn.com/siflow/ntzNiCADsREJ4Kfh/products/siverse/media/image/image7.png?fit=max&auto=format&n=ntzNiCADsREJ4Kfh&q=85&s=f3fa51a1ed41a7b26bd034594986c6cc" alt="image" width="3329" height="1745" data-path="products/siverse/media/image/image7.png" />

支持按名称和类别快速搜索。

* Name：支持按名称和版本进行模糊搜索。
* Class：用户在注册时定义的自定义镜像类别

| 参数名称              | 参数说明                                             |
| ----------------- | ------------------------------------------------ |
| Name              | 镜像名称                                             |
| Version           | 镜像版本                                             |
| Size              | 镜像大小（仅在构建成功时显示）                                  |
| Description       | 镜像详情                                             |
| Authorized        | 可以查看该镜像的用户（管理员可以查看租户下的所有镜像）                      |
| Images Url        | 镜像 URL（仅在构建成功后显示）；跨多个集群部署时，显示每个集群的镜像 URL         |
| Show Clusters     | 已上线的集群                                           |
| No Show Clusters  | 未上线的集群                                           |
| Build Status      | 构建状态，包括 Succeeded、Terminated、Waiting 和 Error 等状态 |
| Task Message      | 构建信息将显示构建的关键节点详情                                 |
| Scheduled Message | 调度信息，创建镜像任务的调度信息                                 |
| Created At        | 镜像创建时间                                           |
| Updated At        | 镜像修改时间                                           |

### 镜像详情

<img src="https://mintcdn.com/siflow/ntzNiCADsREJ4Kfh/products/siverse/media/image/image8.png?fit=max&auto=format&n=ntzNiCADsREJ4Kfh&q=85&s=298e95783c51aba98dd520bb8a5eada8" alt="image" width="3318" height="746" data-path="products/siverse/media/image/image8.png" />

点击 Build Config 查看构建详情，包括基础镜像信息、构建参数、Dockerfile、组件等详细信息

<img src="https://mintcdn.com/siflow/ntzNiCADsREJ4Kfh/products/siverse/media/image/image9.png?fit=max&auto=format&n=ntzNiCADsREJ4Kfh&q=85&s=1fe28f1b1bb7a11e634a3fc1e96d49a5" alt="image" width="1208" height="1280" data-path="products/siverse/media/image/image9.png" />

### 镜像构建日志

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image10.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=851f5a97d3cc05e868e942a3ca7cb214" alt="image" width="1594" height="256" data-path="products/siverse/media/image/image10.png" />

点击 Build Log 查看构建日志。如果构建失败，您可以查看具体错误原因等详细信息

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image11.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=df273f3cbdf5c761eb07cb3f197896d1" alt="image" width="953" height="1280" data-path="products/siverse/media/image/image11.png" />

### 镜像更新

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image12.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=ef0ed73fa4fcf939a23b4d9905b96236" alt="image" width="1355" height="256" data-path="products/siverse/media/image/image12.png" />

点击 "Update Config" 修改镜像构建详情。只能修改 commitId、description 和构建参数；无法更改 name 和 version 等基本信息

修改后，镜像将根据新的构建参数和相关信息重新构建

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image13.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=70644e93d20f9c4dfa234975d699731d" alt="image" width="1490" height="1757" data-path="products/siverse/media/image/image13.png" />

### 镜像共享

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image14.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=81dd385990cb7ab16431b5a6b383ba22" alt="image" width="1462" height="256" data-path="products/siverse/media/image/image14.png" />

点击 "Share" 将镜像权限共享给其他用户

管理时，您可以选择共享给特定用户或共享给所有组成员。当启用 "All Group Members" 时，当前租户内的所有用户都可以查看它

作为普通用户时，您只能共享给特定用户，而不能共享给整个组。如果该镜像已经共享给所有用户，普通用户则无法再次共享它

### 镜像删除

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image15.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=8f5c9b35185a3a3383784c226ed6661d" alt="image" width="1324" height="256" data-path="products/siverse/media/image/image15.png" />

如果您是管理员，可以删除该镜像。如果您不是管理员，当镜像已共享给整个组或除您之外的其他用户时，则无法删除该镜像。只有当镜像仅授权给您本人使用时，普通用户才能删除该镜像，如下所示：

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image16.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=d252dfd8601e536850cb5a6e6c916fd0" alt="image" width="1280" height="293" data-path="products/siverse/media/image/image16.png" />

**注意：** 此操作仅会移除该镜像在 siflow 平台上的可见性，但不会删除原始镜像数据。要删除镜像，请前往 \[Console] — \[Image Registry] 模块执行删除操作。

### 镜像部署/取消部署

管理员可以对所有镜像执行 Deploy/UnDeploy 操作，而普通用户只能操作自己创建的镜像。部署到特定集群时，前提是必须在 Harbor 中启用项目的自动同步机制，以便镜像信息能够同步到目标集群的镜像仓库。部署过程中，系统会验证镜像信息是否存在于目标集群的镜像仓库中；只有当镜像信息存在时，部署才会成功

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image17.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=ab419404800502804deea39e70699b39" alt="image" width="1017" height="327" data-path="products/siverse/media/image/image17.png" />

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image18.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=d52f26b1cb9d1958d67693f9e86c2ef1" alt="image" width="914" height="287" data-path="products/siverse/media/image/image18.png" />

在列表页面，您可以查看在线和离线集群的信息

<img src="https://mintcdn.com/siflow/vap4jT3tfBA1sSQZ/products/siverse/media/image/image19.png?fit=max&auto=format&n=vap4jT3tfBA1sSQZ&q=85&s=a9b860d575723637e57b7fa5ea4bf003" alt="image" width="1280" height="276" data-path="products/siverse/media/image/image19.png" />
