Eseguire attività in contenitori con criteri di riavvio

La semplicità e la velocità della distribuzione di contenitori in Istanze di Azure Container offre una piattaforma interessante per l'esecuzione di attività eseguite una sola volta come la compilazione, il test e il rendering di immagini in un'istanza del contenitore.

Con un criterio di riavvio configurabile, è possibile specificare l'arresto dei contenitori al completamento dei processi. Poiché le istanze del contenitore di Azure vengono fatturate al secondo, vengono addebitate solo le risorse di calcolo usate mentre il contenitore che esegue l'attività è in esecuzione.

Gli esempi presentati in questo articolo usano l'interfaccia della riga di comando di Azure. È necessario avere installato in locale l'interfaccia della riga di comando di Azure versione 2.0.21 o successiva o in alternativa usare l'interfaccia della riga di comando di Azure in Azure Cloud Shell.

Criteri di riavvio del contenitore

Quando si crea un gruppo di contenitori in Istanze di Azure Container, è possibile specificare una delle tre impostazioni dei criteri di riavvio.

Criterio di riavvio Descrizione
Always I contenitori nel gruppo di contenitori vengono sempre riavviati. Questo criterio è l'impostazione predefinita applicata quando non si specifica alcun criterio di riavvio al momento della creazione del contenitore.
Never I contenitori nel gruppo di contenitori non vengono mai riavviati. I contenitori vengono eseguiti al massimo una volta.
OnFailure I contenitori nel gruppo di contenitori vengono riavviati solo quando il processo eseguito nel contenitore ha esito negativo, ovvero quando termina con un codice di uscita diverso da zero. I contenitori vengono eseguiti almeno una volta.

Nota

Se il gruppo di contenitori viene configurato con un indirizzo IP, tale indirizzo IP può cambiare quando il gruppo di contenitori viene riavviato.

Specificare i criteri di riavvio

Le modalità con cui si specificano i criteri di riavvio dipendano da come si creano le istanze del contenitore, ad esempio con l'interfaccia della riga di comando di Azure, i cmdlet di Azure PowerShell o nel portale di Azure. Nell'interfaccia della riga di comando di Azure specificare il parametro --restart-policy quando si chiama az container create.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerimage \
    --restart-policy OnFailure

Eseguire l'esempio di completamento

Per visualizzare i criteri di riavvio in azione, creare un'istanza del contenitore dall'immagine Microsoft aci-wordcount e specificare il criterio di riavvio OnFailure. Questo contenitore di esempio esegue uno script di Python che, per impostazione predefinita, analizza il testo Amleto di Shakespeare, scrive le 10 parole più comuni in STDOUT ed esce.

Eseguire il contenitore di esempio con il comando seguente az container create:

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure

Istanze di Azure Container avvia il contenitore e lo interrompe quando la sua applicazione, o lo script in questo caso, esce. Quando Istanze di Azure Container arresta un contenitore i cui criteri di riavvio sono Never o OnFailure, lo stato del contenitore viene impostato su Terminato. È possibile controllare lo stato del contenitore usando il comando az container show:

az container show \
    --resource-group myResourceGroup \
    --name mycontainer \
    --query containers[0].instanceView.currentState.state

Output di esempio:

"Terminated"

Quando lo stato del contenitore di esempio mostra Terminato, è possibile visualizzare l'output dell'attività visualizzando i log dei contenitori. Eseguire il comando az container logs per visualizzare l'output dello script:

az container logs --resource-group myResourceGroup --name mycontainer

Output:

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

Questo esempio mostra l'output che lo script ha inviato a STDOUT. Le attività nei contenitori, tuttavia, potrebbero invece scrivere l'output in un archivio permanente per il recupero successivo. Ad esempio in una condivisione file di Azure.

Passaggi successivi

Gli scenari basati su attività, ad esempio l'elaborazione in batch di un set di dati di grandi dimensioni con diversi contenitori, possono trarre vantaggio dalle variabili di ambiente personalizzate o dalle righe di comando in fase di esecuzione.

Per informazioni dettagliate su come mantenere l'output dei contenitori che vengono eseguiti fino al completamento, vedere Montaggio di una condivisione file di Azure con Istanze di Azure Container.