Distribuire un gruppo di contenitoriDeploy a container group

Istanze di contenitore di Azure supporta la distribuzione di più contenitori in un singolo host usando un gruppo di contenitori.Azure Container Instances supports the deployment of multiple containers onto a single host using a container group. Ciò è utile quando si compila un contenitore collaterale dell'applicazione per la registrazione, il monitoraggio o qualsiasi altra configurazione in cui un servizio necessita di un secondo processo associato.This is useful when building an application sidecar for logging, monitoring, or any other configuration where a service needs a second attached process.

Questo documento descrive come eseguire una configurazione multicontenitore con contenitore collaterale tramite la distribuzione di un modello di Azure Resource Manager.This document walks you through running a simple multi-container sidecar configuration by deploying an Azure Resource Manager template.

Nota

I gruppi multicontenitore sono attualmente limitati ai contenitori Linux.Multi-container groups are currently restricted to Linux containers. Microsoft si impegna per rendere disponibili tutte le funzionalità anche per i contenitori Windows, ma nel frattempo è possibile trovare le differenze correnti tra le piattaforme in Quotas and region availability for Azure Container Instances (Quote e aree disponibili per Istanze di contenitore di Azure).While we are working to bring all features to Windows containers, you can find current platform differences in Quotas and region availability for Azure Container Instances.

Configurare il modelloConfigure the template

Creare un file denominato azuredeploy.json e copiare il codice JSON seguente al suo interno.Create a file named azuredeploy.json and copy the following JSON into it.

In questo esempio viene definito un gruppo di contenitori con due contenitori, un indirizzo IP pubblico e due porte esposte.In this sample, a container group with two containers, a public IP address, and two exposed ports is defined. Il primo contenitore del gruppo esegue un'applicazione con connessione Internet.The first container in the group runs an internet-facing application. Il secondo contenitore, ovvero il contenitore collaterale, invia una richiesta HTTP all'applicazione Web principale tramite la rete locale del gruppo.The second container, the sidecar, makes an HTTP request to the main web application via the group's local network.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "microsoft/aci-helloworld:latest",
    "container2name": "aci-tutorial-sidecar",
    "container2image": "microsoft/aci-tutorial-sidecar"
  },
  "resources": [
    {
      "name": "myContainerGroup",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2017-10-01-preview",
      "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/', 'myContainerGroup')).ipAddress.ip]"
    }
  }
}

Per usare un registro di immagini del contenitore privato, aggiungere un oggetto al documento JSON con il formato seguente.To use a private container image registry, add an object to the JSON document with the following format.

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

Distribuire il modelloDeploy the template

Creare un gruppo di risorse con il comando az group create.Create a resource group with the az group create command.

az group create --name myResourceGroup --location eastus

Distribuire il modello con il comando az group deployment create.Deploy the template with the az group deployment create command.

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

Entro pochi secondi si dovrebbe ricevere una risposta iniziale da Azure.Within a few seconds, you should receive an initial response from Azure.

Visualizzare lo stato della distribuzioneView deployment state

Per visualizzare lo stato della distribuzione, usare il comando az container show.To view the state of the deployment, use the az container show command. Il comando restituisce l'indirizzo IP pubblico con provisioning eseguito con cui è possibile accedere all'applicazione.This returns the provisioned public IP address by which the application can be accessed.

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

Output:Output:

Name              ResourceGroup    ProvisioningState    Image                                                           IP:ports               CPU/Memory       OsType    Location
----------------  ---------------  -------------------  --------------------------------------------------------------  ---------------------  ---------------  --------  ----------
myContainerGroup  myResourceGroup  Succeeded            microsoft/aci-helloworld:latest,microsoft/aci-tutorial-sidecar  52.168.26.124:80,8080  1.0 core/1.5 gb  Linux     westus

Visualizzare i logView logs

Visualizzare l'output del log di un contenitore con il comando az container logs.View the log output of a container using the az container logs command. L'argomento --container-name specifica il contenitore da cui effettuare il pull dei log.The --container-name argument specifies the container from which to pull logs. In questo esempio viene specificato il primo contenitore.In this example, the first container is specified.

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

Output:Output:

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

Per visualizzare i log per il contenitore collaterale, eseguire lo stesso comando specificando il nome del secondo contenitore.To see the logs for the side-car container, run the same command specifying the second container name.

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

Output:Output:

Every 3s: curl -I http://localhost                          2018-01-09 23:25:11

  % 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: Tue, 09 Jan 2018 23:25:11 GMT
Connection: keep-alive

Come si può notare, il contenitore collaterale invia periodicamente una richiesta HTTP all'applicazione Web principale tramite la rete locale del gruppo per verificare che l'applicazione sia in esecuzione.As you can see, the sidecar is periodically making an HTTP request to the main web application via the group's local network to ensure that it is running. Questo esempio di contenitore collaterale può essere esteso per attivare un avviso se si riceve un codice di risposta HTTP diverso da 200 OK.This sidecar example could be expanded to trigger an alert if it received an HTTP response code other than 200 OK.

Passaggi successiviNext steps

Questo articolo ha illustrato i passaggi necessari per la distribuzione di un'istanza multicontenitore di Azure.This article covered the steps needed for deploying a multi-container Azure container instance. Per un'esperienza end-to-end di Istanze di contenitore di Azure, vedere l'apposita esercitazione.For an end-to-end Azure Container Instances experience, see the Azure Container Instances tutorial.