> ## 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/MD6YC9TIaGxx7fBG/siverse/image/media/image1.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=c172eaafdf880df8dd1c0b386d25895a" alt="image" width="1483" height="366" data-path="siverse/image/media/image1.jpeg" />

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

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

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image2.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=1b693fae9b23cdeec677fc1f18b27606" alt="image" width="1490" height="621" data-path="siverse/image/media/image2.jpeg" />

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

<img src="https://mintcdn.com/siflow/aexqFemTXLn-HzpC/siverse/image/media/image3.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=82e0a0071b26dd2c6f3b4d7c57b9ef44" alt="image" width="2723" height="1013" data-path="siverse/image/media/image3.jpeg" />

其中，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/aexqFemTXLn-HzpC/siverse/image/media/image4.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=9da108b2261f686d27a47572f2adfc0b" alt="image" width="1472" height="1178" data-path="siverse/image/media/image4.jpeg" />

### 从第三方库导入

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

<img src="https://mintcdn.com/siflow/aexqFemTXLn-HzpC/siverse/image/media/image5.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=e0c818938184eb4e9781922d48ffcf59" alt="image" width="1490" height="368" data-path="siverse/image/media/image5.jpeg" />

### 导入已有镜像

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

<img src="https://mintcdn.com/siflow/aexqFemTXLn-HzpC/siverse/image/media/image6.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=be6fa8e9562a727d29f27f7b71690aa4" alt="image" width="1500" height="425" data-path="siverse/image/media/image6.jpeg" />

## 镜像

<img src="https://mintcdn.com/siflow/aexqFemTXLn-HzpC/siverse/image/media/image7.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=636f80903b3fa47345b488d386e6a03f" alt="image" width="3365" height="1832" data-path="siverse/image/media/image7.jpeg" />

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

* 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/aexqFemTXLn-HzpC/siverse/image/media/image8.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=ae8ed545ce1dd12080067587ddd10268" alt="image" width="3342" height="1062" data-path="siverse/image/media/image8.jpeg" />

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

<img src="https://mintcdn.com/siflow/aexqFemTXLn-HzpC/siverse/image/media/image9.jpeg?fit=max&auto=format&n=aexqFemTXLn-HzpC&q=85&s=d07b68716a2ac0e35d9bb0c53d6c35bb" alt="image" width="1502" height="1746" data-path="siverse/image/media/image9.jpeg" />

### 镜像构建日志

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image10.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=c8ba8fd3648c5944ea8742b6eda4a951" alt="image" width="3340" height="1040" data-path="siverse/image/media/image10.jpeg" />

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

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image11.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=e528fd16aeeb9151ab8952a2849af5f8" alt="image" width="1475" height="1945" data-path="siverse/image/media/image11.jpeg" />

### 镜像更新

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image12.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=57e34dd7e28cf8727513d7679729522c" alt="image" width="3335" height="1046" data-path="siverse/image/media/image12.jpeg" />

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

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

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image13.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=ff901f1b993914ba6975ad42536df504" alt="image" width="1499" height="1935" data-path="siverse/image/media/image13.jpeg" />

### 镜像共享

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image14.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=58d8bacd4c00e823ab3242b65bfced33" alt="image" width="3350" height="1077" data-path="siverse/image/media/image14.jpeg" />

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

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

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

### 镜像删除

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image15.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=688d00647e64b5ef18f7d2cfee674863" alt="image" width="3345" height="1085" data-path="siverse/image/media/image15.jpeg" />

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

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image16.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=ddf23826324194fc024937e25c75439e" alt="image" width="3336" height="1086" data-path="siverse/image/media/image16.jpeg" />

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

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

<img src="https://mintcdn.com/siflow/MD6YC9TIaGxx7fBG/siverse/image/media/image19.jpeg?fit=max&auto=format&n=MD6YC9TIaGxx7fBG&q=85&s=05c01141f3f0fdaec091c5875398a4f0" alt="image" width="3350" height="1092" data-path="siverse/image/media/image19.jpeg" />
