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, especifique opcionalmente um comando para substituir a instrução de linha de comando padrão inclusas na imagem de contêiner. Esse comportamento é semelhante à linha de comando --entrypoint
para o argumento docker run
.
Assim como definir variáveis de ambiente para instâncias de contêiner, especificar uma linha de comando inicial é útil para trabalhos em lote em que você precisa preparar cada contêiner dinamicamente com configuração específica da tarefa.
Diretrizes de linha de comando
Por padrão, a linha de comando especifica um único processo que é iniciado 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 com suporte no sistema operacional do contêiner. Exemplos:
Sistema operacional Shell padrão Ubuntu /bin/bash
Alpine /bin/sh
Windows cmd
Siga as convenções do shell para combinar vários comandos que serão executados em sequência.
Dependendo da configuração do contêiner, talvez seja necessário definir um caminho completo para o executável ou argumentos da linha de comando.
A definição de uma política de reinicialização apropriada para a instância do contêiner deve ser feita de acordo com a linha de comando, levando em conta se ela especifica uma tarefa de longa execução 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 de linha de comando
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.
Comando az container create: passe uma cadeia de caracteres com o parâmetro
--command-line
. Exemplo:--command-line "python myscript.py arg1 arg2"
).Cmdlet do Azure PowerShell New-AzureRmContainerGroup: passe uma cadeia de caracteres com o parâmetro
-Command
. Exemplo:-Command "echo hello"
.Portal do Azure: na propriedade de Substituição de comando da configuração do contêiner, forneça uma lista separada por vírgulas de cadeias de caracteres, sem aspas. Exemplo:
python, myscript.py, arg1, arg2
.Modelo do Resource Manager ou arquivo YAML ou um dos SDKs do Azure: especifique a propriedade da linha de comando como uma matriz de strings. Exemplo: a matriz JSON
["python", "myscript.py", "arg1", "arg2"]
em um modelo do Resource Manager.Se você estiver familiarizado com a sintaxe do Dockerfile, esse formato será 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"] |
Exemplos de CLI do Azure
Por exemplo, modifique o comportamento da imagem do contêiner microsoft/aci-wordcount, que analisa o texto 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 ao analisar o texto padrão, execute-o com o seguinte comando az container create. Nenhuma linha de comando inicial é especificada, portanto, o comando padrão do contêiner é executado. Para fins de ilustração, este exemplo define variáveis de ambiente para localizar as três principais palavras que têm 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
Depois que o estado do contêiner for exibido como Encerrado (use az container show para verificar o estado), exiba o log com az container logs 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 textos diferentes especificando uma linha de comando diferente. O script Python executado pelo contêiner, wordcount.py, aceita um 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 que têm 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, depois que o contêiner estiver Encerrado, 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óximas etapas
Cenários baseados em tarefas, como processamento em lote de um grande conjunto de dados com vários contêineres, podem se beneficiar de linhas de comando personalizadas em runtime. Para obter mais informações sobre a execução de contêineres com base em tarefas, confira Executar tarefas conteinerizadas com políticas de reinicialização.