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

Compute Nest:コンテナイメージデプロイパッケージ

最終更新日:Sep 04, 2026

Docker コンテナイメージを使用するデプロイでは、コンテナイメージデプロイパッケージの使用を推奨します。 Compute Nest は、イメージをホストおよび保存するためのパブリックな Container Registry (ACR) インスタンスを提供します。マルチテナンシーを確保するため、各サービスプロバイダーには一意の名前空間が割り当てられます。このトピックでは、コンテナイメージデプロイパッケージのユースケースについて説明し、その仕組みを解説し、作成方法と使用方法を説明します。

ユースケース

パブリックインターネットから Docker コンテナイメージをプルするプライベートデプロイメントでは、一時キーを使用してコンテナイメージデプロイパッケージを利用できます。

重要

コンテナイメージデプロイパッケージは、オートスケーリングや初回デプロイ後の頻繁なイメージのプルをサポートしていません。

コンテナイメージデプロイパッケージを使用しない場合

  • パブリックネットワークアクセスがないサービス

    パブリックインターネットにアクセスできないサービスの場合、自己管理の ACR リポジトリを作成できます。リポジトリの内部エンドポイントを設定して、内部ネットワーク経由でイメージをプルします。詳細については、「VPCアクセス制御の設定」をご参照ください。

  • デプロイ後にイメージのプルが必要なサービス

    プライベートデプロイメント:プルアクセスを維持するには、自己管理のパブリックな ACR リポジトリを提供する必要があります。

    フルマネージドサービス:プライベートな ACR リポジトリを作成し、Container Service for Kubernetes (ACK) クラスターが提供する aliyun-acr-credential-helper コンポーネントを使用してイメージをプルできます。

    詳細については、「aliyun-acr-credential-helperコンポーネントを使用したSecretなしのイメージプル」をご参照ください。

  • パブリックにアクセス可能なコンテナイメージ

    コンテナイメージがパブリックにアクセス可能な場合、コンテナイメージデプロイパッケージを使用する必要はありません。パブリックコンテナイメージリポジトリの URL を使用して直接デプロイできます。

仕組み

マルチテナンシーを確保するため、異なるサービスプロバイダーのコンテナイメージは共有リポジトリに保存されますが、名前空間によって分離されます。各サービスプロバイダーは一意の名前空間にマッピングされます。イメージのアップロードまたはプル時に、サービスプロバイダーの AliUid に基づいて名前空間の一時キーが生成されます。アクセス制御は名前空間レベルで適用されます。

詳細

  1. Compute Nest ACR リポジトリへのコンテナイメージのアップロード

    1. サービスプロバイダーは Compute Nest に一時キーを要求します。その後、Compute Nest はサービスプロバイダーの AliUid に対応する名前空間のキーを ACR から取得します。

    2. サービスプロバイダーはこの一時キーを使用して、ローカルのコンテナイメージを Compute Nest ACR リポジトリにアップロードします。イメージは、サービスプロバイダーの AliUid に関連付けられた名前空間に保存されます。

  2. ACK クラスターへのコンテナイメージのデプロイ

    1. Compute Nest は、サービスプロバイダーのコンテナイメージの一時キーを取得し、それを Secret として ACK クラスターにデプロイします。

    2. デプロイ時に、Compute Nest はコンテナイメージデプロイパッケージのプレースホルダーを Compute Nest コンテナイメージリポジトリ内のイメージの URL に置き換え、デプロイされた Secret をプル認証情報として指定します。

    3. その後、ACK クラスターは Secret を使用してコンテナイメージをプルし、デプロイを完了します。

コンテナイメージデプロイパッケージでマネージドソリューションを利用するメリット

Docker コンテナイメージは ACR に保存できます。 サービスプロバイダーは自身のプライベートリポジトリにイメージをアップロードできますが、Compute Nest はパブリックな Compute Nest ACRリポジトリを提供します。このマネージドソリューションは、ACR インスタンスの購入コストを削減し、セキュリティスキャンを簡素化し、誤ったイメージの削除を防ぎ、セキュリティと安定性の両方を確保します。

実装

サービスの Resource Orchestration Service (ROS) テンプレートで、次の 2 つのプレースホルダーを定義する必要があります。これらのプレースホルダーは、デプロイ時に実際の値に置き換えられます。

  • {{ computenest::acrimage::yourimage }}:コンテナイメージデプロイパッケージのプレースホルダー。 デプロイ時に、Compute Nest はこのプレースホルダーを関連するコンテナイメージの URL (例: compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/aliUid1/volcanosh/vc-controller-manager:1.0) に置き換えます。

  • {{ computenest::acr::dockerconfigjson }}:プル認証情報のプレースホルダー。 デプロイ時に、このプレースホルダーはプライベートコンテナイメージをプルするために使用される一時キーに置き換えられます。

次の YAML の例は、コンテナイメージデプロイパッケージの使用方法を示しています。 プル認証情報のプレースホルダー {{ computenest::acr::dockerconfigjson }} は、computenestrepo という名前の Secret としてデプロイされます。この Secret は、イメージプレースホルダーが置き換えられた後、コンテナイメージをプルするための 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. デプロイパッケージの基本情報を設定します。

    1. Compute Nest コンソールにログインします。左側メニューで、サービスアーティファクト を選択します。デプロイメントオブジェクト タブで、リソースの作成 をクリックします。

    2. 基本情報 セクションで、次のパラメーターを設定します。

      パラメーター

      説明

      [リソース名]

      名前には、中国語文字、英字、数字、アンダースコア (_) を使用できます。名前の長さは 3~128 文字である必要があります (中国語1文字は2文字としてカウントされます)。デプロイパッケージ名は作成後に変更できません。

      [バージョン名]

      名前には、中国語文字、英字、数字、アンダースコア (_) を使用できます。名前の長さは 3~50 文字である必要があります (中国語1文字は2文字としてカウントされます)。

      [リソースの説明]

      説明は 10~500 文字である必要があります。中国語1文字は2文字としてカウントされます。

      [リソースグループ]

      デプロイパッケージが属するリソースグループを選択します。

      リソースグループを使用すると、使用状況、権限、または所有者別にクラウドリソースをグループ化でき、組織内の複数のユーザーとプロジェクトの階層的なリソース管理が可能になります。詳細については、「リソースグループ」をご参照ください。

      [タグの設定]

      完全なタグキーとタグ値を入力または選択して、デプロイパッケージにタグを追加します。リソースには最大 20 個のタグを関連付けることができます。利用可能なタグキーまたは値がない場合は、カスタムタグを作成できます。詳細については、「カスタムタグの作成とバインド」をご参照ください。

  2. コンテナイメージのデプロイパッケージを設定します。

    このセクションでは、apache-php5 イメージのアップロードを例に説明します。

    1. リソースの内容 セクションで、リソースタイプ を コンテナーイメージ に設定します。

    2. アクセス資格情報の取得 をクリックして、コンテナイメージを Compute Nest リポジトリにアップロードするためのコマンドを取得します。

      認証情報を取得すると、ページに必要なコマンドが表示されます。 まず、docker login コマンドで Compute Nest イメージリポジトリにログインします。 次に、[イメージ名] と [タグ] (例: latest) を入力した後、docker tag コマンドを使用してローカルイメージにタグを付けます。 最後に、タグ付けされたイメージを docker push コマンドでリポジトリにプッシュします。

      1. コマンドラインツールにログインし、ログインコマンドを実行して Compute Nest イメージリポジトリにアクセスします。

        docker login compute-nest-registry.cn-hangzhou.cr.aliyuncs.com --username=cr_temp_user --password=<temporary_token>
      2. コンテナイメージに Compute Nest イメージリポジトリ用のタグを付けます。

        docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/lxepoo/apache-php5:latest
      3. タグ付けされたコンテナイメージをプッシュします。

        docker push compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/lxepoo/apache-php5:latest
        The push refers to repository [compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/lxepoo/apache-php5]
        6bb81559e239: Pushed
        cea911103474: Pushed
        cc523d99ead5: Pushed
        b00b1ec7b8ef: Pushed
        7715ecdbe18e: Pushed
        5e755f0e0b5c: Pushed
        2a1ce34e52b6: Pushed
        28dc854edc91: Pushed
        24fc817b31ed: Pushed
        7cd75a52f72c: Pushed
        05b156d2bc54: Pushed
        8cc36998586f: Pushed
        ab73fa68e475: Pushed
        dbf739521f53: Pushed
        3e019add9ad9: Pushed
        18e3751aa1ef: Pushed
        4eb95f543324: Pushed
        a594229cce80: Pushed
        69a54e38f06b: Pushed
        d2808f8124fd: Pushed
        fe4c16cbf7a4: Pushed
        latest: digest: sha256:2afcd2b89f317e0570325817f4e8d9c93f12ac781779e365e456ae37aa297f7a size: 4700
    3. プッシュが成功したら、コンテナイメージの選択 セクションで、アップロードしたイメージを選択し、リソースの公開 をクリックします。

  3. デプロイパッケージを表示します。

    1. [サービスデプロイパッケージ] ページに戻ります。 デプロイパッケージの名前をクリックして リソースの詳細 ページに移動し、そのステータスを確認します。

    2. ステータスが 使用可能 に変わると、パッケージの作成は完了です。

デプロイパッケージの使用

このセクションでは、プライベートデプロイメントサービスを作成する際に コンテナイメージデプロイパッケージを使用する方法について説明します。

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

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

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

  4. サービスの基本情報を入力し、必要に応じて ROS テンプレートを入力します。

    ROS テンプレートで、アクセス認証情報のプレースホルダー {{ computenest::acr::dockerconfigjson }} と、ALIYUN::CS::ClusterApplication リソース内のコンテナイメージのプレースホルダー {{ computenest::acrimage::yourimage }} を定義します。

    テンプレートの例

    説明

    このサンプルテンプレートはテスト専用です。

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: Application deployed by using Docker.
      zh-cn:  使用docker部署单机应用
      ja: Dockerを使用してデプロイされたアプリケーション
    Parameters:
      PayType:
        Type: String
        Label:
          en: ECS Instance Charge Type
          zh-cn: 付费类型
          ja: ECSインスタンスの課金タイプ
        Default: PostPaid
        AllowedValues:
          - PostPaid
          - PrePaid
        AssociationProperty: ChargeType
        AssociationPropertyMetadata:
          LocaleKey: InstanceChargeType
      PayPeriodUnit:
        Type: String
        Label:
          en: Pay Period Unit
          zh-cn: 购买资源时长周期
          ja: 購入期間単位
        Default: Month
        AllowedValues:
          - Month
          - Year
        AssociationProperty: PayPeriodUnit
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      PayPeriod:
        Type: Number
        Label:
          en: Period
          zh-cn: 购买资源时长
          ja: 期間
        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: Instance Type
          zh-cn: 实例类型
          ja: インスタンスタイプ
        AssociationProperty: ALIYUN::ECS::Instance::InstanceType
        AssociationPropertyMetadata:
          InstanceChargeType: ${PayType}
        AllowedValues:
          - ecs.g8i.large
          - ecs.g6.large
      InstancePassword:
        NoEcho: true
        Type: String
        Description:
          en: The password of the server. The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/
          zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
          ja: サーバーのパスワード。パスワードは8~30文字で、大文字、小文字、数字、特殊文字 (()\`~!@#$%^&*_-+=|{}[]:;'<>,.?/) のうち少なくとも3種類を含める必要があります
        AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
        Label:
          en: Instance Password
          zh-cn: 实例密码
          ja: インスタンスパスワード
        ConstraintDescription:
          en: The password must be 8 to 30 characters in length and contain at least three of the following character types: uppercase letters, lowercase letters, digits, and special characters ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/.
          zh-cn: 长度 8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
          ja: パスワードは8~30文字で、大文字、小文字、数字、特殊文字 (()\`~!@#$%^&*_-+=|{}[]:;'<>,.?/) のうち少なくとも3種類を含める必要があります。
        MinLength: 8
        MaxLength: 30
        AssociationProperty: ALIYUN::ECS::Instance::Password
      ZoneId:
        Type: String
        Label:
          en: Zone ID
          zh-cn: 可用区ID
          ja: ゾーンID
        AssociationProperty: ALIYUN::ECS::Instance::ZoneId
      VpcId:
        Type: String
        Label:
          en: VPC ID
          zh-cn: 专有网络VPC实例ID
          ja: VPC ID
        Description:
          en: The ID of the existing VPC.
          zh-cn: 现有虚拟专有网络的实例ID
          ja: 既存のVPCのID。
        AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
      VSwitchId:
        Type: String
        Label:
          en: VSwitch ID
          zh-cn: 交换机实例ID
          ja: VSwitch ID
        Description:
          en: The ID of the existing VSwitch.
          zh-cn: 现有业务网络交换机的实例ID
          ja: 既存の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: Software Configuration
              zh-cn: 软件配置
              ja: ソフトウェア設定
          - Parameters:
              - ZoneId
              - VpcId
              - VSwitchId
            Label:
              default: ゾーン設定
  5. [デプロイパッケージの関連付け] セクションで、[コンテナイメージの関連付けを設定] をクリックします。[デプロイメントオブジェクト] の選択 をクリックします。表示されたダイアログボックスで、デプロイパッケージとバージョンを選択し、確定する をクリックしてコンテナイメージデプロイパッケージを関連付けます。

  6. サービスを作成してテストした後、サービスリリース基準に照らして自己チェックを行い、審査のために提出します。詳細については、「審査基準」をご参照ください。

  7. サービスが作成された後、サービス詳細ページでデプロイパッケージの関連付けを確認できます。

    サービス詳細ページで、[デプロイパッケージの関連付け] タブ、次に [コンテナイメージの関連付け] タブをクリックして、プレースホルダー (例: {{ computenest::acrimage::nginx }}) と対応するデプロイパッケージ情報の間の関連付けを確認します。

関連ドキュメント

  • Compute Nest でサービスを作成する方法の詳細については、「サービスの作成」をご参照ください。

  • 不要になったデプロイパッケージまたはそのバージョンは削除できます。詳細については、「デプロイパッケージの削除」をご参照ください。

  • デプロイパッケージの内容やその他の情報を変更するには、新しいバージョンを作成します。詳細については、「新しいバージョンの作成」をご参照ください。

  • デプロイパッケージの更新設定については、「サービスアップグレードの設定」をご参照ください。