

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 nerdctl 和 SOCI CLI 示例创建 SOCI 索引
<a name="soci-indexing-example-create-indexes"></a>

以下页面提供了有关如何使用 nerdctl 和 SOCI CLI 创建 SOCI 索引的示例。

**创建 SOCI 索引示例**

1. 首先为接下来的 AWS CLI 命令设置变量。以下是设置变量的示例。

   ```
   ACCOUNT_ID="111122223333"
   REGION="us-east-1"
   REPOSITORY_NAME="repository-name"
   ORIGINAL_IMAGE_TAG="original-image-tag"
   SOCI_IMAGE_TAG="soci-indexed-image-tag"
   ```

   变量定义：
   + `ACCOUNT_ID`是你的 AWS 账户 身份证
   + `REGION`是您的 AWS 区域 Amazon ECR 私有注册表
   + `REPOSITORY_NAME`是您的 Amazon ECR 私有注册表的名称
   + `ORIGINAL_IMAGE_TAG`是你原始图片的标签
   + `SOCI_IMAGE_TAG`是你的社交索引图片的标签

1. 安装所需的工具：

   ```
   # Install SOCI CLI, containerd, and nerdctl
   sudo yum install soci-snapshotter
   sudo yum install containerd jq  
   sudo systemctl start soci-snapshotter
   sudo systemctl restart containerd
   sudo yum install nerdctl
   ```

1. 设置您的注册表变量：

   ```
   REGISTRY_USER=AWS
   REGISTRY="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com"
   ```

1. 导出您的地区并向 Amazon ECR 进行身份验证：

   ```
   export AWS_REGION=$REGION
   REGISTRY_PASSWORD=$(/usr/local/bin/aws ecr get-login-password --region $AWS_REGION)
   echo $REGISTRY_PASSWORD | sudo nerdctl login -u $REGISTRY_USER --password-stdin $REGISTRY
   ```

1. 提取您的原始容器镜像：

   ```
   sudo nerdctl pull $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG
   ```

1. 创建 SOCI 索引：

   ```
   sudo nerdctl image convert --soci $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
   ```

1. 推送社交索引图片：

   ```
   sudo nerdctl push --platform linux/amd64 $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
   ```

此过程会为您的 ECR 存储库中的原始容器映像创建两个构件：
+ SOCI 索引-支持延迟加载的元数据
+ 图片索引清单-符合 OCI 的清单