エラスティックコンテナーインスタンスを起動した後、ビジネス要件に基づいてインスタンス内のコンテナーを変更する必要がある場合があります。変更されたコンテナー環境を将来使用するために保持する場合は、新しい環境をイメージにパッケージ化し、イメージを Container Registry のイメージリポジトリにプッシュできます。このトピックでは、CommitContainer および DescribeCommitContainerTask API オペレーションを使用して、コンテナーをコミットし、イメージを生成し、イメージを Container Registry のイメージリポジトリにプッシュする方法について説明します。
準備
Container Registry インスタンスとイメージリポジトリを作成し、イメージリポジトリアドレスを取得します。
Container Registry インスタンスとイメージリポジトリの作成方法の詳細については、次のドキュメントを参照してください。
Container Registry インスタンスとイメージリポジトリが作成された後、[リポジトリ] ページからリポジトリアドレスを取得できます。この例では、VPC エンドポイントが取得されます。

Elastic Container Instance の RAM ロールを作成し、ポリシーを RAM ロールにアタッチします。このポリシーにより、RAM ロールは Container Registry にアクセスできます。次に、RAM ロールの Alibaba Cloud Resource Name(ARN)を取得します。
Elastic Container Instance の RAM ロールを作成します
詳細については、信頼できる Alibaba Cloud サービスの RAM ロールの作成 を参照してください。次の構成に注意してください。
ロールの作成ウィザードの ロールタイプの選択 ステップで、[信頼できるエンティティの選択] セクションの Alibaba Cloud サービス を選択します。
ロールの構成 ステップで、[ロールタイプ] パラメーターを 標準サービスロール に設定し、[RAM ロール名] パラメーターを構成し、信頼できるサービスのドロップダウンリストから ECI を選択します。
ポリシーを RAM ロールにアタッチします。
詳細については、RAM ロールへの権限の付与 を参照してください。AliyunContainerRegistryFullAccess ポリシーを選択します。
RAM ロールの ARN を取得します。
ロールの詳細ページの [基本情報] セクションで ARN を取得できます。

構成の説明
CommitContainer API オペレーションを使用すると、非同期タスクを作成できます。エラスティックコンテナーインスタンス内のコンテナーをイメージとして保存し、Alibaba Cloud Container Registry のイメージリポジトリにプッシュできます。次の表に、CommitContainer の主要なパラメーターを示します。詳細については、CommitContainer を参照してください。
パラメーター | タイプ | 例 | 説明 |
ContainerGroupId | string | eci-bp1do4xz75fa5sd**** | CommitContainer タスクを作成するエラスティックコンテナーインスタンスの ID。 |
ContainerName | string | container-1 | イメージを作成するコンテナーの名前。 |
Image.Repository | string | registry-vpc.cn-beijing.aliyuncs.com/test/test-**** | Container Registry のイメージリポジトリアドレス。 セキュリティ上の理由から、Container Registry のイメージリポジトリにのみイメージをプッシュできます。 |
Image.Tag | String | 1.0.1 | イメージタグ。 |
AcrRegistryInfo.InstanceId | string | cri-nwj395hgf6f3**** | Container Registry Enterprise Edition インスタンスの ID。 Container Registry 個人版インスタンスを使用する場合は、このパラメーターを構成する必要はありません。Container Registry Enterprise Edition インスタンスを使用する場合は、このパラメーターを構成する必要があります。 |
AcrRegistryInfo.RegionId | string | cn-beijing | Container Registry Enterprise Edition インスタンスのリージョン ID。 Container Registry 個人版インスタンスを使用する場合は、このパラメーターを構成する必要はありません。Container Registry Enterprise Edition インスタンスを使用する場合は、このパラメーターを構成する必要があります。 |
Arn.RoleArn | string | acs:ram::1609982529******:role/commit-test | RAM ロールの ARN。ARN の構成と取得方法については、このトピックの「準備」セクションを参照してください。 |
Arn.RoleType | string | service | 認証のタイプ。値 service は、RAM ロールが認証に使用されることを示します。 |
CommitContainer API オペレーションを呼び出すと、レスポンスに TaskId パラメーターが含まれます。DescribeCommitContainerTask API オペレーションを呼び出して、タスク ID に基づいて CommitContainer タスクのステータスをクエリできます。返された TaskStatus 値が Succeeded の場合、イメージが生成され、Container Registry のイメージリポジトリにプッシュされます。DescribeCommitContainerTask API オペレーションの詳細については、DescribeCommitContainerTask を参照してください。
サンプル構成
エラスティックコンテナーインスタンス A(インスタンス A)を作成します。
インスタンス A に接続し、コンテナー内で操作を実行します。
この例では、ファイル (hello.txt) がコンテナーに書き込まれます。

CommitContainer API オペレーションを呼び出して、インスタンス A のコンテナー環境をイメージにパッケージ化し、Container Registry のイメージリポジトリにプッシュします。
パラメーターの例:
RegionId=cn-beijing ContainerGroupId=eci-2zeh3j8kdnqvnf5n**** ContainerName-container-1 Image.Repository=registry-vpc.cn-beijing.aliyuncs.com/***-test/***-registry Image.Tag=1.0.1 Arn,RoleArn=acs:ram::1609982529******:role/commit-test Arn.RoleType=serviceContainer Registry Enterprise Edition インスタンスのイメージリポジトリにイメージをプッシュする場合は、AcrRegistryInfo 関連パラメーターを使用して Enterprise Edition インスタンスのアクセス認証情報を構成する必要があります。例:
AcrRegistryInfo.InstanceId=cri-nwj395hgf6f3**** AcrRegistryInfo.RegionId=cn-beijing次の結果が返されます。
{ "TaskId": "t-2zej6nstkg744qc3****", "RequestId": "4ADE19FF-C487-5020-A6E4-03D5D9708834" }DescribeCommitContainerTask API オペレーションを呼び出して、タスク ID に基づいて CommitContainer タスクのステータスをクエリします。
パラメーターの例:
RegionId=cn-beijing TaskId=["t-2zej6nstkg744qc3****"]次の結果が返されます。TaskStatus 値が Succeeded の場合、CommitContainer タスクは正常に実行されます。CommitPhaseInfos セクションでは、PushCommittedImage フェーズのステータスは success です。これは、イメージが Container Registry インスタンスの指定されたイメージリポジトリにプッシュされたことを示します。
{ "TotalCount": 1, "CommitTasks": [ { "TaskId": "t-2zej6nstkg744qc3****", "ContainerName": "container-1", "CommitPhaseInfos": [ ...... { "Status": "Success", "RecordTime": "2023-02-01T11:08:04.313047785+08:00", "Phase": "PushCommittedImage", "Message": "Push image registry-vpc.cn-beijing.aliyuncs.com/***-test/***-registry:1.0.1 successfully" // イメージ registry-vpc.cn-beijing.aliyuncs.com/***-test/***-registry:1.0.1 のプッシュに成功しました } ], "CreationTime": "2023-02-01T11:08:00Z", "TaskStatus": "Succeeded", "FinishedTime": "2023-02-01T11:08:10Z" } ], "NextToken": "", "RequestId": "42E65299-8224-5D4A-915E-5AEC04A523FC" }Container Registry コンソール にログインします。Container Registry インスタンスのイメージリポジトリに、Elastic Container Instance によってプッシュされた新しいイメージを表示できます。

Container Registry インスタンスのイメージリポジトリにプッシュされた新しいイメージに基づいて、エラスティックコンテナーインスタンス B(インスタンス B)を作成します。
この例では、新しいイメージは
registry-vpc.cn-beijing.aliyuncs.com/***-test/***-registry:1.0.1です。
説明Container Registry 個人版インスタンスのイメージリポジトリからイメージを選択する場合は、マイイメージ を選択します。Container Registry Enterprise Edition インスタンスのイメージリポジトリからイメージを選択する場合は、Container Registry Enterprise Edition イメージ を選択します。
インスタンス B のコンテナー環境がインスタンス A のコンテナー環境と同じかどうかを確認します。
この例では、hello.txt ファイルがインスタンス A のコンテナーに追加されます。インスタンス A のコンテナーに基づいてイメージが生成されます。インスタンス B はイメージに基づいて作成されます。その結果、hello.txt ファイルはデフォルトでインスタンス B のコンテナーに表示されます。
