Tutorial: Menyebarkan grup multi-kontainer menggunakan templat Resource Manager

Azure Container Instances mendukung penyebaran beberapa kontainer ke satu host menggunakan grup kontainer. Grup kontainer berguna saat membuat sidecar aplikasi untuk pengelogan, pemantauan, atau konfigurasi lainnya di mana layanan memerlukan proses terpasang kedua.

Dalam tutorial ini, Anda mengikuti langkah-langkah untuk menjalankan konfigurasi sidecar dua kontainer sederhana dengan menyebarkan templat Azure Resource Manager menggunakan Azure CLI. Anda akan mempelajari cara untuk:

  • Mengonfigurasi templat grup multi-kontainer
  • Menyebarkan grup kontainer
  • Menampilkan log kontainer

Templat Resource Manager dapat dengan mudah diadaptasi untuk skenario saat Anda perlu menyebarkan sumber daya layanan Azure tambahan (misalnya, berbagi Azure Files atau jaringan virtual) dengan grup kontainer.

Catatan

Grup multi-kontainer saat ini dibatasi untuk kontainer Linux.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Anda dapat menggunakan Azure Cloud Shell atau Azure CLI lokal.

Mengonfigurasi templat

Mulailah dengan menyalin JSON berikut ke dalam file baru bernama azuredeploy.json. Di Azure Cloud Shell, Anda bisa menggunakan Visual Studio Code untuk membuat file di direktori kerja:

code azuredeploy.json

Templat Resource Manager ini mendefinisikan grup kontainer dengan dua kontainer, alamat IP publik, dan dua port yang terbuka. Kontainer pertama dalam grup menjalankan aplikasi web yang tersambung ke internet. Kontainer kedua, sidecar, membuat permintaan HTTP ke aplikasi web utama melalui jaringan lokal grup.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "containerGroupName": {
      "type": "string",
      "defaultValue": "myContainerGroup",
      "metadata": {
        "description": "Container Group name."
      }
    }
  },
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "[parameters('containerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2019-12-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                },
                {
                  "port": 8080
                }
              ]
            }
          },
          {
            "name": "[variables('container2name')]",
            "properties": {
              "image": "[variables('container2image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              }
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": 80
            },
            {
                "protocol": "tcp",
                "port": 8080
            }
          ]
        }
      }
    }
  ],
  "outputs": {
    "containerIPv4Address": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
    }
  }
}

Untuk menggunakan registri gambar kontainer pribadi, tambahkan objek ke dokumen JSON dengan format berikut. Untuk contoh implementasi konfigurasi ini, lihat dokumentasi Referensi templat ACI Resource Manager.

"imageRegistryCredentials": [
  {
    "server": "[parameters('imageRegistryLoginServer')]",
    "username": "[parameters('imageRegistryUsername')]",
    "password": "[parameters('imageRegistryPassword')]"
  }
]

Sebarkan templat

Buat grup sumber daya dengan perintah az group create.

az group create --name myResourceGroup --location eastus

Sebarkan templat dengan perintah az deployment group create.

az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json

Dalam beberapa detik, Anda seharusnya menerima respons awal dari Azure.

Menampilkan status penyebaran

Untuk menampilkan status penyebaran, gunakan perintah az container show berikut:

az container show --resource-group myResourceGroup --name myContainerGroup --output table

Jika Anda ingin menampilkan aplikasi yang sedang berjalan, navigasikan ke alamat IP-nya di browser Anda. Misalnya, IP-nya adalah 52.168.26.124 dalam contoh output ini:

Name              ResourceGroup    Status    Image                                                                                               IP:ports              Network    CPU/Memory       OsType    Location
----------------  ---------------  --------  --------------------------------------------------------------------------------------------------  --------------------  ---------  ---------------  --------  ----------
myContainerGroup  danlep0318r      Running   mcr.microsoft.com/azuredocs/aci-tutorial-sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest  20.42.26.114:80,8080  Public     1.0 core/1.5 gb  Linux     eastus

Menampilkan log kontainer

Lihat output log kontainer menggunakan perintah az container logs. Argumen --container-name menentukan kontainer untuk menarik log. Dalam contoh ini, kontainer aci-tutorial-app ditentukan.

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-app

Output:

listening on port 80
::1 - - [02/Jul/2020:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"

Untuk melihat log untuk kontainer sidecar, jalankan perintah serupa yang menentukan kontainer aci-tutorial-sidecar.

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-sidecar

Output:

Every 3s: curl -I http://localhost                          2020-07-02 20:36:41

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  1663    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT
ETag: W/"67f-16006818640"
Content-Type: text/html; charset=UTF-8
Content-Length: 1663
Date: Thu, 02 Jul 2020 20:36:41 GMT
Connection: keep-alive

Seperti yang Anda lihat, sidecar secara berkala membuat permintaan HTTP ke aplikasi web utama melalui jaringan lokal grup untuk memastikan bahwa itu berjalan. Contoh sidecar ini dapat diperluas untuk memicu peringatan jika menerima kode respons HTTP selain 200 OK.

Langkah berikutnya

Dalam tutorial ini, Anda menggunakan templat Azure Resource Manager untuk menyebarkan grup multi-kontainer di Azure Container Instances. Anda mempelajari cara untuk:

  • Mengonfigurasi templat grup multi-kontainer
  • Menyebarkan grup kontainer
  • Menampilkan log kontainer

Untuk sampel templat tambahan, lihat Templat Azure Resource Manager untuk Azure Container Instances.

Anda juga dapat menentukan grup multi-kontainer menggunakan file YAML. Karena sifat format YAML yang lebih ringkas, penyebaran dengan file YAML adalah pilihan yang baik ketika penyebaran Anda hanya mencakup instans kontainer.