Поделиться через


Установка командной строки в экземпляре контейнера для переопределения заданной по умолчанию операции командной строки

При необходимости во время создания экземпляра контейнера можно указать команду для переопределения инструкции командной строки по умолчанию, встроенной в образ контейнера. Это поведение аналогично поведению аргумента командной строки --entrypoint в команде docker run.

Как и при настройке переменных среды для экземпляров контейнеров, указание начальной командной строки полезно для пакетных заданий, в которых необходимо динамически подготовить каждый контейнер с помощью конфигурации конкретной задачи.

Рекомендации по использованию командной строки

  • По умолчанию командная строка указывает один процесс, который запускается без оболочки в контейнере. Например, командная строка может выполнять скрипт Python или исполняемый файл. В процессе можно указать дополнительные параметры или аргументы.

  • Чтобы выполнить несколько команд, запустите командную строку, задав окружение оболочки, поддерживаемое в операционной системе контейнера. Примеры:

    Операционная система Оболочка по умолчанию
    Ubuntu /bin/bash
    Alpine /bin/sh
    Windows cmd

    Следуйте соглашениям оболочки, чтобы объединить несколько команд для последовательного выполнения.

  • В зависимости от конфигурации контейнера может потребоваться задать полный путь к исполняемому файлу или аргументам командной строки.

  • Задайте соответствующую политику перезапуска для экземпляра контейнера в зависимости от того, указывает ли командная строка продолжительную или однократную задачу. Например, политику перезапуска NeverOnFailure рекомендуется использовать для однократной задачи.

  • Если вам нужны сведения о точке входа по умолчанию, заданной в образе контейнера, используйте команду проверки образа docker.

Синтаксис командной строки

Синтаксис командной строки зависит от API-интерфейса или средства Azure, используемого для создания экземпляров. Если вы указали окружение оболочки, также следите за ее соглашениями синтаксиса команд.

  • Команда az container create: передача строки с параметром --command-line. Например, --command-line "python myscript.py arg1 arg2".

  • Командлет Azure PowerShell New-AzureRmContainerGroup: передача строки с параметром -Command. Например, -Command "echo hello".

  • Портал Azure: укажите разделенный запятыми список строк без кавычек в свойстве Переопределение команд в конфигурации контейнера. Например, python, myscript.py, arg1, arg2.

  • Шаблон Resource Manager, файл YAML или один из пакетов SDK Azure: укажите свойство командной строки в виде массива строк. Пример: массив JSON ["python", "myscript.py", "arg1", "arg2"] в шаблоне Resource Manager.

    Если вы знакомы с синтаксисом Dockerfile, этот формат аналогичен форме exec инструкции CMD.

Примеры

Azure CLI Портал Шаблон
Одна команда --command-line "python myscript.py arg1 arg2" Переопределение команды: python, myscript.py, arg1, arg2 "command": ["python", "myscript.py", "arg1", "arg2"]
Несколько команд --command-line "/bin/bash -c 'mkdir test; touch test/myfile; tail -f /dev/null'" Переопределение команды: /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"]

Пример для Azure CLI

В качестве примера измените поведение образа контейнера microsoft/aci-wordcount, который анализирует текст трагедии Шекспира Гамлет для поиска наиболее часто встречающихся слов. Вместо анализа трагедии Гамлет можно задать командную строку, которая указывает на другой источник текста.

Чтобы просмотреть выходные данные контейнера microsoft/aci-wordcount при анализе текста по умолчанию, запустите его, выполнив команду az container create. Не указана командная строка запуска, поэтому выполняется команда контейнера по умолчанию. Для иллюстрации в этом примере заданы переменные окружения, чтобы найти первые 3 слова, длина которых составляет от пяти букв:

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

Как только состояние контейнера станет Завершен (используйте az container show для проверки состояния), откройте журнал с помощью команды az container logs, чтобы просмотреть выходные данные.

az container logs --resource-group myResourceGroup --name mycontainer1
[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]

Теперь настройте второй пример контейнера для анализа другого текста, указав другую командную строку. Скрипт Python wordcount.py, который выполняется в этом контейнере, принимает в качестве аргумента URL-адрес и обрабатывает содержимое страницы вместо содержимого по умолчанию.

Например, чтобы определить первые 3 слова, длина которых составляет не менее пяти букв в тексте пьесы Ромео и Джульетта:

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"

Как и прежде, вы сможете просмотреть выходные данные с помощью журналов контейнера, когда его состояние изменится на Terminated (Завершено), как показано ниже.

az container logs --resource-group myResourceGroup --name mycontainer2
[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]

Дальнейшие действия

В сценариях на основе задач, таких как пакетная обработка большого набора данных с несколькими контейнерами, могут использоваться пользовательские командные строки во время выполнения. Дополнительные сведения о выполнении контейнеров на основе задач см. в статье Выполнение контейнерных задач с помощью политик перезапуска.