All Products
Search
Document Center

Compute Nest:Paket Penyebaran Gambar Kontainer

Last Updated:Jun 19, 2026

Untuk penyebaran yang menggunakan gambar kontainer Docker, kami menyarankan penggunaan paket penyebaran gambar kontainer. Compute Nest menyediakan instans Container Registry (ACR) publik untuk menghosting dan menyimpan gambar, di mana setiap penyedia layanan diberikan namespace unik guna mendukung multi-tenancy. Topik ini menjelaskan kasus penggunaan paket penyebaran gambar kontainer, cara kerjanya, serta langkah-langkah pembuatan dan penggunaannya.

Kasus penggunaan

Untuk penyebaran privat yang menarik gambar kontainer Docker dari internet publik, Anda dapat menggunakan paket penyebaran gambar kontainer dengan kunci sementara.

Penting

Paket penyebaran gambar kontainer tidak mendukung auto scaling atau penarikan gambar yang sering setelah penyebaran awal.

Kapan tidak menggunakan paket penyebaran gambar kontainer

  • Layanan tanpa akses jaringan publik

    Untuk layanan yang tidak dapat mengakses internet publik, Anda dapat membuat repository Container Registry (ACR) yang dikelola sendiri. Konfigurasikan titik akhir internal repository tersebut untuk menarik gambar melalui jaringan internal. Untuk informasi lebih lanjut, lihat Konfigurasi kontrol akses VPC.

  • Layanan yang memerlukan penarikan gambar setelah penyebaran

    Penyebaran privat: Anda harus menyediakan repository Container Registry (ACR) publik yang dikelola sendiri untuk mempertahankan akses penarikan.

    Layanan fully managed: Anda dapat membuat repository Container Registry (ACR) privat dan menggunakan komponen aliyun-acr-credential-helper yang disediakan oleh kluster Container Service for Kubernetes (ACK) untuk menarik gambar.

    Untuk informasi lebih lanjut, lihat Gunakan komponen aliyun-acr-credential-helper untuk menarik gambar tanpa menggunakan secret.

  • Gambar kontainer yang dapat diakses publik

    Jika gambar kontainer Anda dapat diakses publik, Anda tidak perlu menggunakan paket penyebaran gambar kontainer. Anda dapat langsung menyebarkannya menggunakan URL repository gambar kontainer publik.

Cara kerja

Untuk memastikan multi-tenancy, gambar kontainer dari penyedia layanan berbeda disimpan dalam repository bersama tetapi diisolasi berdasarkan namespace. Setiap penyedia layanan dipetakan ke namespace unik. Saat mengunggah atau menarik gambar, kunci sementara dihasilkan untuk namespace berdasarkan AliUid penyedia layanan. Kontrol akses diterapkan pada tingkat namespace.

Detail

  1. Unggah gambar kontainer ke repository ACR Compute Nest

    1. Penyedia layanan meminta kunci sementara dari Compute Nest. Compute Nest kemudian memperoleh kunci dari Container Registry (ACR) untuk namespace yang sesuai dengan AliUid penyedia layanan.

    2. Penyedia layanan menggunakan kunci sementara ini untuk mengunggah gambar kontainer lokal ke repository ACR Compute Nest. Gambar tersebut disimpan dalam namespace yang terkait dengan AliUid penyedia layanan.

  2. Sebarkan gambar kontainer ke kluster ACK

    1. Compute Nest memperoleh kunci sementara untuk gambar kontainer penyedia layanan dan menyebarkannya sebagai Secret ke kluster ACK.

    2. Saat penyebaran, Compute Nest mengganti placeholder paket penyebaran gambar kontainer dengan URL gambar di repository gambar kontainer Compute Nest dan menentukan Secret yang diterapkan sebagai kredensial penarikan.

    3. Kluster ACK kemudian menggunakan Secret tersebut untuk menarik gambar kontainer dan menyelesaikan penyebaran.

Mengapa menggunakan solusi terkelola untuk paket penyebaran gambar kontainer?

Gambar kontainer Docker dapat disimpan di Container Registry (ACR). Meskipun penyedia layanan dapat mengunggah gambar ke repository privat mereka sendiri, Compute Nest menawarkan repository ACR Compute Nest publik. Solusi terkelola ini mengurangi biaya pembelian instans ACR, menyederhanakan pemindaian keamanan, dan mencegah penghapusan gambar yang tidak disengaja, sehingga menjamin keamanan dan stabilitas.

Implementasi

Anda harus menentukan dua placeholder berikut dalam templat Resource Orchestration Service (ROS) layanan Anda. Placeholder ini akan diganti dengan nilai aktual selama penyebaran.

  • {{ computenest::acrimage::yourimage }}: Placeholder untuk paket penyebaran gambar kontainer. Selama penyebaran, Compute Nest menggantinya dengan URL gambar kontainer terkait, seperti compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/aliUid1/volcanosh/vc-controller-manager:1.0.

  • {{ computenest::acr::dockerconfigjson }}: Placeholder untuk kredensial penarikan gambar. Selama penyebaran, ini diganti dengan kunci sementara yang digunakan untuk menarik gambar kontainer privat.

Contoh YAML berikut menunjukkan cara menggunakan paket penyebaran gambar kontainer. Placeholder kredensial penarikan {{ computenest::acr::dockerconfigjson }} diterapkan sebagai Secret bernama computenestrepo. Secret ini kemudian digunakan sebagai imagePullSecret untuk menarik gambar kontainer setelah placeholder gambar diganti.

Contoh kode

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

Buat dan gunakan

Prasyarat

Anda harus telah menginstal Docker dan membuat gambar Docker. Jika belum, lihat Instal dan gunakan Docker.

Buat paket penyebaran

  1. Konfigurasikan informasi dasar untuk paket penyebaran.

    1. Login ke Konsol Compute Nest. Di panel navigasi sebelah kiri, pilih Service Deployment Package. Pada tab Packages, klik Create Deployment Package.

    2. Di bagian Basic Information, konfigurasikan parameter berikut.

      Parameter

      Deskripsi

      Deployment Package Name

      Nama dapat berisi karakter Tionghoa, huruf Inggris, angka, dan garis bawah (_). Nama harus terdiri dari 3 hingga 128 karakter, dengan satu karakter Tionghoa dihitung sebagai dua karakter. Nama paket penyebaran tidak dapat diubah setelah dibuat.

      Version Name

      Nama dapat berisi karakter Tionghoa, huruf Inggris, angka, dan garis bawah (_). Nama harus terdiri dari 3 hingga 50 karakter, dengan satu karakter Tionghoa dihitung sebagai dua karakter.

      Description

      Deskripsi harus terdiri dari 10 hingga 500 karakter. Satu karakter Tionghoa dihitung sebagai dua karakter.

      Resource Group

      Pilih kelompok sumber daya tempat paket penyebaran berada.

      Kelompok sumber daya memungkinkan Anda mengelompokkan sumber daya cloud berdasarkan penggunaan, izin, atau kepemilikan, sehingga memungkinkan manajemen sumber daya hierarkis untuk banyak pengguna dan proyek dalam suatu organisasi. Untuk informasi lebih lanjut, lihat kelompok sumber daya.

      Tag Settings

      Pilih atau masukkan kunci tag dan nilai tag lengkap untuk menambahkan tag ke paket penyebaran. Anda dapat mengikat hingga 20 tag ke suatu sumber daya. Jika tidak tersedia kunci atau nilai tag, Anda dapat membuat tag kustom. Untuk informasi lebih lanjut, lihat Buat dan ikat tag kustom.

  2. Konfigurasikan paket penyebaran gambar kontainer.

    Bagian ini menggunakan contoh pengunggahan gambar apache-php5.

    1. Di bagian Deployment Package Content, atur Deployment Package Type menjadi Container Image.

    2. Klik Obtain Access Credential untuk mendapatkan perintah mengunggah gambar kontainer Anda ke repository Compute Nest.

      Setelah memperoleh kredensial, halaman akan menampilkan perintah yang diperlukan. Pertama, login ke repository gambar Compute Nest dengan perintah docker login. Selanjutnya, setelah memasukkan Image Name dan Tag (misalnya, latest), tandai gambar lokal Anda menggunakan perintah docker tag. Terakhir, dorong gambar yang telah ditandai ke repository dengan perintah docker push.

      1. Login ke tool command-line Anda dan jalankan perintah login untuk mengakses repository gambar Compute Nest.

        docker login compute-nest-registry.cn-hangzhou.cr.aliyuncs.com --username=cr_temp_user --password=<temporary_token>
      2. Tandai gambar kontainer Anda untuk repository gambar 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. Dorong gambar kontainer yang telah ditandai.

        docker push compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/156345785543852/registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest
        The push refers to repository [compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/156345785543852/registry.cn-hangzhou.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. Setelah proses dorong berhasil, di bagian Container Image, pilih gambar yang telah Anda unggah dan klik Publish Deployment Package.

  3. Lihat paket penyebaran.

    1. Kembali ke halaman Service Deployment Package. Klik nama paket penyebaran untuk membuka halaman Deployment Package Details dan lihat statusnya.

    2. Saat status berubah menjadi Available, paket telah berhasil dibuat.

Gunakan paket penyebaran

Bagian ini menjelaskan cara menggunakan paket penyebaran gambar kontainer saat membuat layanan penyebaran privat.

  1. Login ke Konsol Compute Nest.

  2. Di panel navigasi sebelah kiri, klik My Services. Pada tab Created Services di halaman My Services, klik Create Service.

  3. Di halaman Create New Service, pilih Custom launch sebagai metode pembuatan, pilih Private Service sebagai tipe layanan, lalu klik Next: Configure Settings.

  4. Masukkan informasi dasar layanan dan masukkan templat ROS sesuai kebutuhan.

    Dalam templat ROS, definisikan placeholder {{ computenest::acr::dockerconfigjson }} untuk kredensial akses dan placeholder {{ computenest::acrimage::yourimage }} untuk gambar kontainer dalam resource ALIYUN::CS::ClusterApplication.

    Contoh templat

    Catatan

    Templat contoh ini hanya untuk pengujian.

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: Application deployed by using Docker.
      zh-cn:  使用docker部署单机应用
    Parameters:
      PayType:
        Type: String
        Label:
          en: ECS Instance Charge Type
          zh-cn: 付费类型
        Default: PostPaid
        AllowedValues:
          - PostPaid
          - PrePaid
        AssociationProperty: ChargeType
        AssociationPropertyMetadata:
          LocaleKey: InstanceChargeType
      PayPeriodUnit:
        Type: String
        Label:
          en: Pay Period Unit
          zh-cn: 购买资源时长周期
        Default: Month
        AllowedValues:
          - Month
          - Year
        AssociationProperty: PayPeriodUnit
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
      PayPeriod:
        Type: Number
        Label:
          en: Period
          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: Instance Type
          zh-cn: 实例类型
        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,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
        AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
        Label:
          en: Instance Password
          zh-cn: 实例密码
        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,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
        MinLength: 8
        MaxLength: 30
        AssociationProperty: ALIYUN::ECS::Instance::Password
      ZoneId:
        Type: String
        Label:
          en: Zone ID
          zh-cn: 可用区ID
        AssociationProperty: ALIYUN::ECS::Instance::ZoneId
      VpcId:
        Type: String
        Label:
          en: VPC ID
          zh-cn: 专有网络VPC实例ID
        Description:
          en: The ID of the existing VPC.
          zh-cn: 现有虚拟专有网络的实例ID
        AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
      VSwitchId:
        Type: String
        Label:
          en: VSwitch ID
          zh-cn: 交换机实例ID
        Description:
          en: The ID of the existing VSwitch.
          zh-cn: 现有业务网络交换机的实例ID
        Default: ''
        AssociationProperty: 'ALIYUN::ECS::VSwitch::VSwitchId'
        AssociationPropertyMetadata:
          VpcId: VpcId
          ZoneId: ZoneId
      AdminPassword:
        Type: String
        AssociationProperty: ALIYUN::ECS::Instance::Password
        Label: Administrator Password
        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:
          # Billing method
          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
                # You can reference parameters in the docker-compose.yaml file.
                # A single nginx service instance.
                services:
                  # Service name
                  nginx:
                    # Docker image
                    image: {{computenest::acrimage::nginx}}
                    # Port mapping
                    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
                # This command snippet runs before Docker Compose starts. You can reference parameters in the command.
                echo "before docker compose starts"
                mkdir -p /home/admin/application/nginx/logs
                systemctl start docker-compose-app
                sleep 10
                # This command snippet runs after Docker Compose starts. You can reference parameters in the command.
                echo "after docker compose starts"
                echo ${AdminPassword}
                # The callback is invoked when the script is successfully run, and WaitCondition no longer needs to wait for signals.
                ${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: Billing Configuration
          - Parameters:
              - EcsInstanceType
              - InstancePassword
            Label:
              default: Resource Configuration
          - Parameters:
              - AdminPassword
            Label:
              en: Software Configuration
              zh-cn: 软件配置
          - Parameters:
              - ZoneId
              - VpcId
              - VSwitchId
            Label:
              default: Zone Configuration
  5. Di bagian Deployment Package Association, Set Container Image Association. Klik Select Deployment Package. Di kotak dialog yang muncul, pilih paket penyebaran dan versinya, lalu klik OK untuk mengasosiasikan paket penyebaran gambar kontainer.

  6. Setelah membuat dan menguji layanan, lakukan pemeriksaan mandiri terhadap kriteria rilis layanan dan kirimkan untuk ditinjau. Untuk informasi lebih lanjut, lihat Kriteria tinjauan.

  7. Setelah layanan dibuat, Anda dapat melihat asosiasi paket penyebaran di halaman detail layanan.

    Di halaman detail layanan, klik tab Deployment Package Association, lalu tab Container Image Association untuk melihat asosiasi antara placeholder (seperti {{ computenest::acrimage::nginx }}) dan informasi paket penyebaran terkaitnya.

Dokumen terkait

  • Untuk informasi lebih lanjut tentang cara membuat layanan di Compute Nest, lihat Buat layanan.

  • Anda dapat menghapus paket penyebaran atau salah satu versinya jika tidak lagi diperlukan. Untuk informasi lebih lanjut, lihat Hapus paket penyebaran.

  • Untuk mengubah konten atau informasi lain dari paket penyebaran, buat versi baru. Untuk informasi lebih lanjut, lihat Buat versi baru.

  • Untuk mengatur konfigurasi pembaruan paket penyebaran, lihat Konfigurasi peningkatan layanan.