

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 帳戶 ID
   + `REGION` 是 Amazon ECR 私有登錄檔 AWS 區域 的
   + `REPOSITORY_NAME` 是 Amazon ECR 私有登錄檔的名稱
   + `ORIGINAL_IMAGE_TAG` 是原始映像的標籤
   + `SOCI_IMAGE_TAG` 是 SOCI 索引影像的標籤

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. 推送 SOCI 索引影像：

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

此程序會為 ECR 儲存庫中的原始容器映像建立兩個成品：
+ SOCI 索引 - 啟用延遲載入的中繼資料
+ 影像索引資訊清單 - OCI 相容資訊清單