Definir a linha de comando em uma instância de contêiner para substituir a operação de linha de comando padrão
Ao criar uma instância de contêiner, opcionalmente, especifique um comando para substituir a instrução de linha de comando padrão incorporada na imagem de contêiner. Esse comportamento é semelhante ao argumento de linha de --entrypoint
comando para docker run
.
Como definir variáveis de ambiente para instâncias de contêiner, especificar uma linha de comando inicial é útil para trabalhos em lote nos quais você precisa preparar cada contêiner dinamicamente com configuração específica de tarefa.
Diretrizes de linha de comando
Por padrão, a linha de comando especifica um único processo que começa sem um shell no contêiner. Por exemplo, a linha de comando pode executar um script Python ou um arquivo executável. O processo pode especificar parâmetros ou argumentos adicionais.
Para executar vários comandos, comece sua linha de comando definindo um ambiente de shell suportado no sistema operacional de contêiner. Exemplos:
Sistema operativo Shell padrão Ubuntu /bin/bash
Alpine /bin/sh
Windows cmd
Siga as convenções do shell para combinar vários comandos para executar em sequência.
Dependendo da configuração do contêiner, talvez seja necessário definir um caminho completo para o executável da linha de comando ou argumentos.
Defina uma política de reinicialização apropriada para a instância do contêiner, dependendo se a linha de comando especifica uma tarefa de execução longa ou uma tarefa de execução única. Por exemplo, uma política de reinicialização de
Never
ouOnFailure
é recomendada para uma tarefa de execução única.Se você precisar de informações sobre o ponto de entrada padrão definido em uma imagem de contêiner, use o comando docker image inspect .
Sintaxe da linha de comandos
A sintaxe da linha de comando varia dependendo da API do Azure ou da ferramenta usada para criar as instâncias. Se você especificar um ambiente de shell, observe também as convenções de sintaxe de comando do shell.
az container create command: Passe uma string com o
--command-line
parâmetro. Exemplo:--command-line "python myscript.py arg1 arg2"
).Cmdlet New-AzureRmContainerGroup Azure PowerShell: passe uma cadeia de caracteres com o
-Command
parâmetro. Exemplo:-Command "echo hello"
.Portal do Azure: na propriedade Command override da configuração do contêiner, forneça uma lista de cadeias de caracteres separadas por vírgula, sem aspas. Exemplo:
python, myscript.py, arg1, arg2
).Modelo do Gerenciador de Recursos ou arquivo YAML ou um dos SDKs do Azure: especifique a propriedade da linha de comando como uma matriz de cadeias de caracteres. Exemplo: a matriz
["python", "myscript.py", "arg1", "arg2"]
JSON em um modelo do Resource Manager.Se você estiver familiarizado com a sintaxe do Dockerfile, esse formato é semelhante à forma exec da instrução CMD.
Exemplos
CLI do Azure | Portal | Modelo | |
---|---|---|---|
Comando único | --command-line "python myscript.py arg1 arg2" |
Substituição de comando: python, myscript.py, arg1, arg2 |
"command": ["python", "myscript.py", "arg1", "arg2"] |
Vários comandos | --command-line "/bin/bash -c 'mkdir test; touch test/myfile; tail -f /dev/null'" |
Substituição de comando: /bin/bash, -c, mkdir test; touch test/myfile; tail -f /dev/null |
"command": ["/bin/bash", "-c", "mkdir test; touch test/myfile; tail -f /dev/null"] |
Exemplo de CLI do Azure
Como exemplo, modifique o comportamento da imagem do contêiner microsoft/aci-wordcount, que analisa o texto no Hamlet de Shakespeare para encontrar as palavras que ocorrem com mais frequência. Em vez de analisar Hamlet, você pode definir uma linha de comando que aponte para uma fonte de texto diferente.
Para ver a saída do contêiner microsoft/aci-wordcount quando ele analisa o texto padrão, execute-o com o seguinte comando az container create . Nenhuma linha de comando start é especificada, portanto, o comando container padrão é executado. Para fins de ilustração, este exemplo define variáveis de ambiente para localizar as três principais palavras com pelo menos cinco letras:
az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--environment-variables NumWords=3 MinLength=5 \
--restart-policy OnFailure
Quando o estado do contêiner for exibido como Terminado (use az container show para verificar o estado), exiba o log com logs de contêiner az para ver a saída.
az container logs --resource-group myResourceGroup --name mycontainer1
[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]
Agora, configure um segundo contêiner de exemplo para analisar texto diferente especificando uma linha de comando diferente. O script Python executado pelo contêiner, wordcount.py, aceita uma URL como argumento e processa o conteúdo dessa página em vez do padrão.
Por exemplo, para determinar as três principais palavras com pelo menos cinco letras em Romeu e Julieta:
az container create \
--resource-group myResourceGroup \
--name mycontainer2 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure \
--environment-variables NumWords=3 MinLength=5 \
--command-line "python wordcount.py http://shakespeare.mit.edu/romeo_juliet/full.html"
Novamente, quando o contêiner for Terminado, exiba a saída mostrando os logs do contêiner:
az container logs --resource-group myResourceGroup --name mycontainer2
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]
Próximos passos
Cenários baseados em tarefas, como o processamento em lote de um grande conjunto de dados com vários contêineres, podem se beneficiar de linhas de comando personalizadas em tempo de execução. Para obter mais informações sobre como executar contêineres baseados em tarefas, consulte Executar tarefas em contêineres com políticas de reinicialização.