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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Командлет New-AzContainerGroup Azure PowerShell: передайте строку с параметром -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 . Не указана командная строка запуска, поэтому выполняется команда контейнера по умолчанию. Для иллюстрации в этом примере задаются переменные среды, чтобы найти первые три слова, длиной по крайней мере пять букв:

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-адрес и обрабатывает содержимое страницы вместо содержимого по умолчанию.

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

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)]

Следующие шаги

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