すべてのプロダクト
Search
ドキュメントセンター

Compute Nest:コンテナイメージアーティファクト

最終更新日:Apr 02, 2026

コンテナイメージデプロイメントパッケージを使用すると、非公開の Docker コンテナイメージを Compute Nest を介してサービス利用者に配布できます。これにより、イメージを公開する必要がなくなります。Compute Nest は、各サービスプロバイダーのイメージが隔離された名前空間に保存される公開 Container Registry (ACR) リポジトリを管理します。デプロイメント中、Compute Nest はテンプレート識別子を実際のイメージ URL と短期間有効なプルキーに置き換えるため、ACK クラスターは永続的な認証情報の漏洩なしにイメージを取得できます。

Compute Nest の公開 Container Registry リポジトリを使用することで、独自の Container Registry インスタンスを運用するオーバーヘッドがなくなります。インスタンス料金、手動のアクセスの制御ポリシー、誤ってイメージを削除するリスクもありません。Compute Nest はストレージ、セキュリティスキャン、アクセスを一元的に処理します。

制限事項

コンテナイメージデプロイメントパッケージは、すべてのシナリオに適しているわけではありません。次の場合には、このアプローチを避けてください。

  • サービスにオートスケーリングが必要な場合。

  • ワークロードが頻繁にイメージをプルする場合。

いずれかの制限事項が適用される場合は、以下の「代替案」をご参照ください。

代替案

シナリオ代替案
サービスがインターネットにアクセスできないセルフマネージド型の Container Registry リポジトリを作成し、内部 URL を使用して内部ネットワーク経由でイメージをプルします。詳細については、「VPC ACL の設定」をご参照ください。
デプロイメント後にイメージをプルする必要がある — プライベートサービスセルフマネージド型のパブリック Container Registry リポジトリを作成し、イメージがプル時にアクセス可能な状態を維持するようにします。
デプロイメント後にイメージをプルする必要がある — フルマネージドサービスプライベート Container Registry リポジトリを作成し、パスワードなしのイメージプルを可能にするために、ご利用の Container Service for Kubernetes (ACK) クラスターで aliyun-acr-credential-helper コンポーネント を設定します。
パブリックコンテナイメージデプロイメント中にパブリック URL から直接プルします。デプロイメントパッケージは不要です。

仕組み

すべてのサービスプロバイダーは、1 つの Compute Nest 公開 Container Registry リポジトリを共有します。Compute Nest は、各プロバイダーに Alibaba Cloud アカウント ID にちなんで名付けられた専用の名前空間を割り当て、テナント間でイメージを隔離します。

イメージのアップロード

  1. Compute Nest API を呼び出して、一時的なアップロードキーを取得します。Compute Nest は Container Registry API を呼び出し、名前空間のスコープ付きキーを返します。

  2. その一時キーを使用して、ローカルイメージを Container Registry リポジトリにプッシュします。イメージは名前空間に格納されます。

ACK クラスターへのデプロイ

  1. Compute Nest は、名前空間にスコープされた一時的なプルキーを生成し、ターゲット ACK クラスターに Kubernetes Secret として保存します。

  2. Compute Nest は、Resource Orchestration Service (ROS) テンプレート内の {{ computenest::acrimage::yourimage }} 識別子を実際の Container Registry イメージ URL に置き換え、Secret を imagePullSecret として設定します。

  3. ACK クラスターはイメージをプルしてデプロイします。

ROS テンプレート識別子

ROS テンプレートで次の識別子を定義します。Compute Nest はデプロイ時にこれらを実際の値に置き換えます。

識別子置換先
{{ computenest::acrimage::yourimage }}関連付けられたイメージの Container Registry URL (例: compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/aliUid1/volcanosh/vc-controller-manager:1.0
{{ computenest::acr::dockerconfigjson }}イメージをプルするために使用される一時的なキー

次の例は、両方の識別子を使用する ALIYUN::CS::ClusterApplication リソースを示しています。プルキーは computenestrepo という名前の Secret に保存され、その後 Deployment の imagePullSecret として参照されます。

サンプルコード

Resources:
  ClusterApplication:
    Type: ALIYUN::CS::ClusterApplication
    Properties:
      YamlContent: |
          apiVersion: v1
          data:
            .dockerconfigjson: {{computenest::acr::dockerconfigjson}}
          kind: Secret
          metadata:
            name: computenestrepo
            namespace: nginx
          type: kubernetes.io/dockerconfigjson
          ---
          apiVersion: apps/v1
          kind: Deployment
          spec:
            template:
              spec:
                containers:
                - name: nginx
                  image: {{ computenest::acrimage::nginx }}
                  ports:
                  - containerPort: 80
                imagePullSecrets:
                - name: computenestrepo

コンテナイメージデプロイメントパッケージの作成

開始する前に、以下を確認してください。

  • Docker がインストールされ、Docker イメージがビルドされました。詳細については、「Docker のインストールと使用」をご参照ください。

  • コンテナイメージデプロイメントパッケージがご利用のシナリオに適していること (「制限事項」をご参照ください)。

  1. Compute Nest コンソールにログインします。左側のナビゲーションウィンドウで、[サービスデプロイメントパッケージ]をクリックします。[デプロイメントパッケージ] セクションで、[デプロイメントパッケージの作成]をクリックします。

  2. [デプロイメントパッケージ情報] セクションで、次のパラメーターを設定します。

    パラメーター説明
    デプロイメントパッケージ名デプロイメントパッケージの名前。3~128 文字で、文字、数字、アンダースコア (_) のみを使用できます。作成後は変更できません。
    バージョン名このバージョンの名前。3~50 文字で、文字、数字、アンダースコア (_) のみを使用できます。
    説明デプロイメントパッケージの説明。10~500 文字。
    リソースグループデプロイメントパッケージを割り当てるリソースグループ。リソースグループを使用すると、使用量、権限、リージョン別にリソースを整理できます。「リソースグループの管理」をご参照ください。
    タグ設定デプロイメントパッケージにアタッチするタグ。タグキーと値を選択または入力します。デプロイメントパッケージごとに最大 20 個のタグ。カスタムタグを作成するには、「カスタムタグの追加」をご参照ください。
  3. コンテナイメージを構成します。この例では、apache-php5 イメージを使用します。

    1. [デプロイメントパッケージコンテンツ] セクションで、[デプロイメントパッケージタイプ][コンテナイメージ] に設定します。

    2. [アクセス認証情報の取得] をクリックして、Compute Nest Container Registry リポジトリのログインコマンドとイメージプッシュコマンドを取得します。image

    3. ターミナルを開き、ログインコマンドを実行してリポジトリで認証します。image

    4. ローカルイメージにタグを付けます。image

    5. タグ付けされたイメージを Compute Nest Container Registry リポジトリにプッシュします。image

  4. [製品の選択] パラメーターを設定し、[デプロイメントパッケージを公開] をクリックします。

  5. サービスデプロイメントパッケージ」ページに戻ります。[パッケージ] タブで、デプロイメントパッケージの ID をクリックします。[デプロイメントパッケージの詳細] ページで、状態が [利用可能] であることを確認します。

コンテナイメージデプロイメントパッケージの使用

この例では、プライベートサービスを作成して、コンテナイメージデプロイメントパッケージを参照する方法を示します。

  1. Compute Nest コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[マイサービス] をクリックします。[作成済みサービス] タブで、[サービスの作成] をクリックします。

  3. サービスの作成]ページで、[サービス作成方法の選択]を[カスタム起動]に、[サービスタイプの選択]を[プライベートサービス]に設定し、[次へ: 設定の構成]をクリックします。

    image

  4. [基本情報] セクションを入力します。[サービスデプロイメント] セクションで、テンプレートの入力タイプを [カスタムテンプレート] に設定し、[手動でテンプレートをインポート] を選択し、[デプロイメント方法]ROS に設定して、テンプレートの内容を入力します。ALIYUN::CS::ClusterApplication リソースに、両方の識別子を含めます:

    • {{ computenest::acr::dockerconfigjson }} — プル認証情報

    • {{ computenest::acrimage::yourimage }} — コンテナイメージ参照

    サンプルテンプレート

    説明

    次のサンプルテンプレートはテストのみを目的としています。

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: Docker によってデプロイされたアプリケーション
      zh-cn: Docker を使用して単一アプリケーションをデプロイする
    Parameters:
      PayType:
        Type: String
        Label:
          en: ECS インスタンスの課金タイプ
          zh-cn: 課金タイプ
        Default: PostPaid
        AllowedValues:
          - PostPaid
          - PrePaid
        AssociationProperty: ChargeType
        AssociationPropertyMetadata:
          LocaleKey: InstanceChargeType
      PayPeriodUnit:
        Type: String
        Label:
          en: 支払い期間単位
          zh-cn: リソース購入期間
        Default: Month
        AllowedValues:
          - Month
          - Year
        AssociationProperty: PayPeriodUnit
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      PayPeriod:
        Type: Number
        Label:
          en: 期間
          zh-cn: リソース購入期間
        Default: 1
        AllowedValues:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          - 9
        AssociationProperty: PayPeriod
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      EcsInstanceType:
        Type: String
        Label:
          en: インスタンスタイプ
          zh-cn: インスタンスタイプ
        AssociationProperty: ALIYUN::ECS::Instance::InstanceType
        AssociationPropertyMetadata:
          InstanceChargeType: ${PayType}
        AllowedValues:
          - ecs.g8i.large
          - ecs.g6.large
    
      InstancePassword:
        NoEcho: true
        Type: String
        Description:
          en: サーバーログインパスワード。長さは 8~30 文字で、3 種類 (大文字、小文字、数字、()\`~!@#$%^&*_-+=|{}[]:;'<>,.?/ の特殊記号) を含める必要があります。
          zh-cn: サーバーログインパスワード。長さは 8~30 文字で、3 種類 (大文字、小文字、数字、()\`~!@#$%^&*_-+=|{}[]:;'<>,.?/ の特殊記号) を含める必要があります。
        AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
        Label:
          en: インスタンスパスワード
          zh-cn: インスタンスパスワード
        ConstraintDescription:
          en: 長さは 8~30 文字で、3 種類 (大文字、小文字、数字、()\`~!@#$%^&*_-+=|{}[]:;'<>,.?/ の特殊記号) を含める必要があります。
          zh-cn: 長さは 8~30 文字で、3 種類 (大文字、小文字、数字、()\`~!@#$%^&*_-+=|{}[]:;'<>,.?/ の特殊記号) を含める必要があります。
        MinLength: 8
        MaxLength: 30
        AssociationProperty: ALIYUN::ECS::Instance::Password
      ZoneId:
        Type: String
        Label:
          en: ゾーン ID
          zh-cn: アベイラビリティーゾーン ID
        AssociationProperty: ALIYUN::ECS::Instance::ZoneId
      VpcId:
        Type: String
        Label:
          en: VPC ID
          zh-cn: 仮想プライベートクラウド (VPC) インスタンス ID
        Description:
          en: >-
            コンソール - 仮想プライベートクラウドから (vpc-xxx) で始まる ID を検索してください。
          zh-cn: 既存の仮想プライベートクラウドのインスタンス ID
        AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
      VSwitchId:
        Type: String
        Label:
          en: vSwitch ID
          zh-cn: vSwitch インスタンス ID
        Description:
          en: >-
            既存のビジネスネットワーク vSwitch のインスタンス ID。コンソール - 仮想プライベートクラウド - vSwitch でクエリしてください。
          zh-cn: 既存のビジネスネットワーク vSwitch のインスタンス ID
        Default: ''
        AssociationProperty: 'ALIYUN::ECS::VSwitch::VSwitchId'
        AssociationPropertyMetadata:
          VpcId: VpcId
          ZoneId: ZoneId
      AdminPassword:
        Type: String
        AssociationProperty: ALIYUN::ECS::Instance::Password
        Label: 管理者パスワード
        NoEcho: True
    Resources:
      SecurityGroup:
        Type: ALIYUN::ECS::SecurityGroup
        Properties:
          SecurityGroupName:
            Ref: ALIYUN::StackName
          VpcId:
            Ref: VpcId
          SecurityGroupIngress:
            - PortRange: 80/80
              Priority: 1
              SourceCidrIp: 0.0.0.0/0
              IpProtocol: tcp
              NicType: internet
      InstanceGroup:
        Type: ALIYUN::ECS::InstanceGroup
        Properties:
          # 課金方法。
          InstanceChargeType:
            Ref: PayType
          PeriodUnit:
            Ref: PayPeriodUnit
          Period:
            Ref: PayPeriod
          VpcId:
            Ref: VpcId
          VSwitchId:
            Ref: VSwitchId
          SecurityGroupId:
            Ref: SecurityGroup
          ZoneId:
            Ref: ZoneId
          ImageId: centos_7
          Password:
            Ref: InstancePassword
          InstanceType:
            Ref: EcsInstanceType
          SystemDiskCategory: cloud_essd
          SystemDiskSize: 200
          InternetMaxBandwidthOut: 5
          IoOptimized: optimized
          MaxAmount: 1
      WaitCondition:
        Type: ALIYUN::ROS::WaitCondition
        Properties:
          Count: 1
          Handle:
            Ref: WaitConditionHandle
          Timeout: 300
      WaitConditionHandle:
        Type: ALIYUN::ROS::WaitConditionHandle
      InstallPackage:
        Type: ALIYUN::ECS::RunCommand
        Properties:
          InstanceIds:
            Fn::GetAtt:
              - InstanceGroup
              - InstanceIds
          Type: RunShellScript
          Sync: true
          Timeout: 300
          CommandContent:
            Fn::Sub:
              - |
                yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
                yum makecache fast
                yum -y install docker-ce jq
                systemctl enable docker
                systemctl start docker
                sleep 10
    
                dockerJson='{{ computenest::acr::dockerconfigjson }}'
                decodeDockerJson=$(echo $dockerJson | base64 -d)
                host=$(echo $decodeDockerJson | jq '.auths' | jq 'keys' | jq .[0])
                username=$(echo $decodeDockerJson | jq ".auths.$host.username" | tr -d '"')
                password=$(echo $decodeDockerJson | jq ".auths.$host.password" | tr -d '"')
                host=$(echo $host | tr -d '"')
                docker login $host --username=$username --password=$password
    
                mkdir -p /home/admin/application
                cat >/home/admin/application/docker-compose.yaml<<EOF
                # docker-compose.yaml ファイル内のパラメーターを参照できます。
                # NGINX サービスインスタンス。
                services:
                  # サービス名。
                  nginx:
                    # Docker イメージ。
                    image: {{computenest::acrimage::nginx}}
                    # ポートマッピング。
                    ports:
                      - 80:80
                    volumes:
                      - /home/admin/application/nginx/logs:/var/log/nginx/
                EOF
    
                cat > /etc/systemd/system/docker-compose-app.service <<EOF
                [Unit]
                Description=Docker Compose Application Service
                Requires=docker.service
                After=docker.service
    
                [Service]
                Type: oneshot
                RemainAfterExit=yes
                WorkingDirectory=/home/admin/application
                ExecStart=/usr/bin/docker compose up -d
                ExecStop=/usr/bin/docker compose down
                TimeoutStartSec=0
    
                [Install]
                WantedBy=multi-user.target
                EOF
    
                systemctl enable docker-compose-app
    
                # Docker Compose の起動前に実行されるコードスニペット。コマンド内のパラメーターを参照できます。
                echo "before docker compose starts"
                mkdir -p /home/admin/application/nginx/logs
    
                systemctl start docker-compose-app
                sleep 10
                # Docker Compose の起動後に実行されるコードスニペット。コマンド内のパラメーターを参照できます。
                echo "after docker compose starts"
                echo ${AdminPassword}
    
                # スクリプトが正常に実行されるとコールバックが呼び出され、WaitCondition はシグナル送信を待つ必要がなくなります。
                ${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
              - CurlCli:
                  Fn::GetAtt:
                    - WaitConditionHandle
                    - CurlCli
    Outputs:
      Endpoint:
        Value:
          Fn::Sub:
            - http://${Address}:80
            - Address:
                Fn::Select:
                - 0
                - Fn::GetAtt:
                  - InstanceGroup
                  - PublicIps
    Metadata:
      ALIYUN::ROS::Interface:
        ParameterGroups:
          - Parameters:
              - PayType
              - PayPeriodUnit
              - PayPeriod
            Label:
              default: 課金方法の構成
          - Parameters:
              - EcsInstanceType
              - InstancePassword
            Label:
              default: リソース構成
    
          - Parameters:
              - AdminPassword
            Label:
              en: ソフトウェア構成
              zh-cn: ソフトウェア構成
    
          - Parameters:
              - ZoneId
              - VpcId
              - VSwitchId
            Label:
              default: ゾーン構成
  5. [デプロイメントパッケージの関連付け] セクションで、[コンテナイメージの関連付けを設定] を見つけ、[デプロイメントパッケージの選択] をクリックします。 [デプロイメントパッケージの選択 (コンテナイメージの関連付け)] ダイアログボックスで、作成したデプロイメントパッケージとバージョンを選択し、[OK] をクリックします。

  6. 残りのパラメーターを設定し、[サービスの作成] をクリックします。サービスが作成された後、テストを実行します。テストに合格した後、Compute Nest のレビュー基準を満たしていることを確認し、レビューのために提出します。詳細については、「レビュー基準」をご参照ください。

  7. サービス詳細ページで、[サービス詳細] タブに移動します。[サービスデプロイメント] セクションで、[関連付けられたデプロイメントパッケージ] タブをクリックし、次に [コンテナイメージの関連付け] タブを開いてデプロイメントパッケージの関連付けを確認します。

次のステップ