Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакетная служба Azure позволяет выполнять и масштабировать большие количества заданий в пакетной обработке данных в Azure. Такие задачи могут выполняться напрямую на виртуальных машинах (узлах) в пуле пакетной службы. Кроме того, пул пакетной службы можно настроить для выполнения задач в совместимых с Docker контейнерах на узлах. В этой статье показано, как создать пул вычислительных узлов, которые поддерживают выполнение задач контейнера, и как выполнять эти задачи в пуле.
В приведённых здесь примерах кода используются SDK Batch для .NET и Python. Вы также можете использовать другие пакеты SDK и средства Batch, включая портал Azure, для создания пулов Batch с поддержкой контейнеров и запуска задач в контейнерах.
Зачем нужны контейнеры?
Контейнеры предоставляют простой способ выполнения задач пакетной службы без необходимости управлять средой и зависимостями для запуска приложений. Контейнеры развертывают приложения в виде легковесных, переносимых, самодостаточных единиц, которые могут выполняться в нескольких средах. Например, создайте и протестируйте контейнер локально, а затем отправьте образ контейнера в реестр в Azure или в другое место. Модель развертывания контейнера гарантирует, что среда выполнения приложения всегда правильно установлена и настроена, независимо от того, где размещено приложение. Для решения контейнерных задач в пакетной службе также можно воспользоваться преимуществами функций неконтейнерных задач, включая пакеты приложений и управление файлами ресурсов и выходными файлами.
Предварительные требования
Вам следует разбираться в основных понятиях, связанных с контейнерами, а также знать, как создать пул и задание в Batch.
Версии SDK: SDK Batch поддерживают образы контейнеров, начиная со следующих версий:
- Пакетный REST API версии 2017-09-01.6.0
- Версия 8.0.0 пакета SDK .NET для Batch
- SDK Python для Batch версии 4.0
- Batch SDK для Java версии 3.0
- SDK Batch для Node.js версии 3.0
Учетные записи. В своей подписке Azure необходимо создать учетную запись пакетной службы и при необходимости создать учетную запись службы хранилища Azure.
Поддерживаемый образ виртуальной машины: контейнеры поддерживаются только в пулах, созданных с помощью конфигурации виртуальной машины, из поддерживаемого образа (указанного в следующем разделе). Если вы предоставляете пользовательский образ, ознакомьтесь с рекомендациями в следующем разделе и требованиями к использованию управляемого образа для создания настраиваемого пула образов.
Примечание.
Начиная с версий Batch SDK:
- Пакетная версия .NET SDK 16.0.0
- Пакетный SDK для Python версии 14.0.0
- Пакетный пакет sdk java версии 11.0.0
- Batch Node.js SDK версии 11.0.0
В настоящее время containerConfiguration требует передачи свойства Type, а поддерживаются следующие значения: ContainerType.DockerCompatible и ContainerType.CriCompatible.
Помните о следующих ограничениях:
- Пакетная служба обеспечивает поддержку удаленного прямого доступа к памяти (RDMA) только для контейнеров, работающих в пулах Linux.
- Для рабочих нагрузок контейнеров Windows следует выбрать размер многоядерных виртуальных машин для пула.
Внимание
По умолчанию Docker создает сетевой мост с указанием подсети 172.17.0.0/16. Если вы указываете виртуальную сеть для пула, убедитесь, что конфликтующие диапазоны IP-адресов отсутствуют.
Поддерживаемые образы виртуальных машин
Чтобы создать пул вычислительных узлов виртуальной машины для рабочих нагрузок контейнера, используйте один из поддерживаемых образов Windows или Linux, указанных ниже. Дополнительные сведения об образах Marketplace, совместимых с Batch, см. в разделе Список образов виртуальных машин.
Поддержка Windows
Batch поддерживает образы Windows Server с обозначениями поддержки контейнеров.
API для вывода списка всех поддерживаемых образов в Batch указывает на наличие DockerCompatible возможности, если образ поддерживает контейнеры Docker. Batch позволяет, но не поддерживает напрямую образы, опубликованные Mirantis, с указанной возможностью DockerCompatible. Эти образы можно развертывать только в учетной записи Batch с режимом распределения пула "Подписка пользователя".
Вы также можете создать пользовательский образ для включения функциональных возможностей контейнеров в Windows.
Примечание.
Образы с артикулами SKU -with-containers и -with-containers-smalldisk выведены из обращения. Дополнительные сведения и альтернативные параметры среды выполнения контейнеров см. в объявлении .
Поддержка Linux
Для контейнерных рабочих нагрузок Linux служба Batch в настоящее время поддерживает следующие образы Linux, опубликованные в Azure Marketplace, без необходимости использовать настраиваемый образ.
- Издатель:
microsoft-dsvm- Предложение:
ubuntu-hpc
- Предложение:
- Издатель:
almalinux- Предложение:
8-hpc-gen1 - Предложение:
8-hpc-gen2
- Предложение:
Альтернативные параметры изображения
В настоящее время существуют другие образы, опубликованные microsoft-azure-batch, которые поддерживают контейнерные рабочие нагрузки:
- Издатель:
microsoft-azure-batch- Предложение:
ubuntu-server-container - Предложение:
ubuntu-server-container-rdma(только для использования со SKU виртуальных машин с InfiniBand)
- Предложение:
Предупреждение
Рекомендуется использовать образы, отличные от опубликованных microsoft-azure-batch, поскольку срок жизненного цикла этих образов скоро истекает.
Примечания.
Корень данных Docker из указанных выше изображений находится в разных местах:
- Для образа HPC или
microsoft-dsvm(предложение:ubuntu-hpcи т. д.) корневой каталог данных Docker не отличается от значения Docker по умолчанию: /var/lib/docker в Linux и C:\ProgramData\Docker в Windows. Эти папки находятся на диске ОС.
Для образов, опубликованных не через Batch, существует риск, что диск ОС быстро заполнится при загрузке образов контейнеров.
Потенциальные решения для клиентов
Измените корневой каталог данных Docker в задаче запуска при создании пула в BatchExplorer. Ниже приведен пример команды Start Task:
1) sudo systemctl stop docker
2) sudo vi /lib/systemd/system/docker.service
+++
FROM:
ExecStart=/usr/bin/docker daemon -H fd://
TO:
ExecStart=/usr/bin/docker daemon -g /new/path/docker -H fd://
+++
3) sudo systemctl daemon-reload
4) sudo systemctl start docker
Эти образы поддерживаются только для использования в пулах пакетная служба Azure и оптимизированы для запуска контейнеров Docker. Они содержат следующее:
- Предустановленная среда выполнения контейнеров Moby, совместимая с Docker.
- Предварительно установленные драйверы GPU NVIDIA и среда выполнения контейнера NVIDIA для упрощения развертывания на виртуальных машинах серии N Azure.
- Образы виртуальных машин с суффиксом
-rdmaпредварительно настроены с поддержкой размеров виртуальных машин InfiniBand RDMA. Эти образы виртуальных машин не следует использовать с размерами VM, не поддерживающими InfiniBand.
Вы также можете создавать собственные образы, совместимые с контейнерами Batch, на одном из дистрибутивов Linux, совместимых с Batch. Для поддержки Docker на пользовательском образе установите подходящую среду выполнения, совместимую с Docker, например версию Docker или Mirantis Container Runtime. Установка только средства, совместимого с Docker-CLI, недостаточно; Требуется среда выполнения, совместимая с подсистемой Docker.
Внимание
Ни корпорация Майкрософт, ни пакетная служба Azure не будут предоставлять поддержку проблем, связанных с Docker (любой версией или выпуском), Средой выполнения контейнеров Mirantis или средами выполнения Moby. Клиентам, решившим использовать эти среды выполнения в своих образах, следует обращаться в компанию или организацию, оказывающую поддержку по вопросам, связанным со средой выполнения.
Дополнительные рекомендации по использованию пользовательского образа Linux:
- Чтобы воспользоваться производительностью графического процессора типоразмеров серии N в Azure при использовании пользовательского образа, предварительно установите драйверы NVIDIA. Кроме того, необходимо установить служебную программу подсистемы Docker для GPU NVIDIA — NVIDIA Docker.
- Для доступа к сети Azure RDMA используйте размер виртуальной машины с поддержкой RDMA. Необходимые драйверы RDMA установлены в образах CentOS HPC и Ubuntu, поддерживаемых Batch. Для выполнения рабочих нагрузок MPI может потребоваться дополнительная конфигурация. См. Использование экземпляров RDMA или GPU в пуле Batch.
Конфигурация контейнера для пула Batch
Чтобы включить пакетный пул для выполнения рабочих нагрузок контейнеров, необходимо указать параметры BatchVmContainerConfiguration в объекте BatchVmConfiguration пула. Эта статья содержит ссылки на справочную документацию по .NET API для Batch. Соответствующие параметры доступны в API Batch Python.
Можно создать пул с поддержкой контейнеров как с предварительно загруженными образами контейнеров, так и без них, как показано в следующих примерах. Процесс извлечения (или предварительной выборки) позволяет предварительно загрузить образы контейнеров из Docker Hub или другого реестра контейнеров в Интернете. Для повышения производительности используйте реестр контейнеров Azure в том же регионе, что и учетная запись пакетной службы.
Преимущество предварительной выборки образов контейнеров заключается в том, что при первом запуске задач им не нужно ждать загрузки образа контейнера. Конфигурация контейнеров загружает образы контейнеров на виртуальные машины при создании пула. Задачи, выполняемые в пуле, могут использовать список образов контейнеров и параметры запуска контейнера.
Примечание.
Docker Hub ограничивает количество вытягивания изображений. Убедитесь, что ваша нагрузка не превышает опубликованные ограничения на скорость запросов для образов из Docker Hub. Рекомендуется использовать Реестр контейнеров Azure напрямую или использовать кэш артефактов в ACR.
Пул без предварительно полученных образов контейнеров
Для настройки пула с включенным контейнером без предварительно полученных контейнерных образов определите объекты ContainerConfiguration и VirtualMachineConfiguration, как показано в следующих примерах. В этих примерах используется образ ОС сервера Ubuntu для контейнерных пулов пакетной службы Azure из Marketplace.
Примечание: Версия сервера Ubuntu, используемая в примере, предназначена для целей иллюстрации. При необходимости можно изменить node_agent_sku_id на версию, которую вы используете.
image_ref_to_use = models.BatchVmImageReference(
publisher='microsoft-dsvm',
offer='ubuntu-hpc',
sku='2204',
version='latest')
"""
Specify container configuration. This is required even though there are no prefetched images.
"""
container_conf = models.BatchContainerConfiguration(type='dockerCompatible')
new_pool = models.BatchPoolCreateOptions(
id=pool_id,
virtual_machine_configuration=models.VirtualMachineConfiguration(
image_reference=image_ref_to_use,
container_configuration=container_conf,
node_agent_sku_id='batch.node.ubuntu 22.04'),
vm_size='STANDARD_D2S_V3',
target_dedicated_nodes=1)
...
BatchImageReference imageReference = new BatchImageReference()
{
Publisher = "microsoft-dsvm",
Offer = "ubuntu-hpc",
Sku = "2204",
Version = "latest"
};
// Specify container configuration. This is required even though there are no prefetched images.
BatchVmContainerConfiguration containerConfig = new BatchVmContainerConfiguration("dockerCompatible");
// VM configuration
BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
imageReference: imageReference,
nodeAgentSkuId: "batch.node.ubuntu 22.04")
{
ContainerConfiguration = containerConfig
};
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = "STANDARD_D2S_V3",
DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = 1 }
}
};
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, poolId, poolData);
Предзагрузка образов для настройки контейнера
Чтобы предварительно загрузить образы контейнеров в пул, добавьте список образов контейнеров (container_image_names на Python) в ContainerConfiguration.
В следующем простом примере на Python показано, как предварительно загрузить стандартный образ контейнера Ubuntu из центра Docker.
image_ref_to_use = models.BatchVmImageReference(
publisher='microsoft-dsvm',
offer='ubuntu-hpc',
sku='2204',
version='latest')
"""
Specify container configuration, fetching the official Ubuntu container image from Docker Hub.
"""
container_conf = models.BatchContainerConfiguration(
type='dockerCompatible',
container_image_names=['ubuntu'])
new_pool = models.BatchPoolCreateOptions(
id=pool_id,
virtual_machine_configuration=models.VirtualMachineConfiguration(
image_reference=image_ref_to_use,
container_configuration=container_conf,
node_agent_sku_id='batch.node.ubuntu 22.04'),
vm_size='STANDARD_D2S_V3',
target_dedicated_nodes=1)
...
В следующем примере на C# предполагается, что вы намерены предварительно загрузить образ TensorFlow из центра Docker. Данный пример включает задачу запуска, выполняемую на узле виртуальной машины на узлах пула. Можно запустить стартовую задачу в узле, например, для вставки файлового сервера, доступ к которому можно получить из контейнеров.
BatchImageReference imageReference = new BatchImageReference()
{
Publisher = "microsoft-dsvm",
Offer = "ubuntu-hpc",
Sku = "2204",
Version = "latest"
};
BatchVmContainerRegistry containerRegistry = new BatchVmContainerRegistry()
{
RegistryServer = "https://hub.docker.com",
IdentityResourceId = new ResourceIdentifier("/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name")
};
// Specify container configuration, prefetching Docker images
BatchVmContainerConfiguration containerConfig = new BatchVmContainerConfiguration("dockerCompatible")
{
ContainerImageNames = { "tensorflow/tensorflow:latest-gpu" },
ContainerRegistries = { containerRegistry }
};
// VM configuration
BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
imageReference: imageReference,
nodeAgentSkuId: "batch.node.ubuntu 22.04")
{
ContainerConfiguration = containerConfig
};
// Set a native host command line start task
BatchAccountPoolStartTask startTaskContainer = new BatchAccountPoolStartTask()
{
CommandLine = "<native-host-command-line>"
};
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = "Standard_NC6S_V3",
DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
StartTask = startTaskContainer
};
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, poolId, poolData);
Предварительная загрузка образов из закрытого реестра контейнеров
Вы также можете заранее загружать образы контейнеров, аутентифицировавшись на сервере частного реестра контейнеров. В следующих примерах объекты ContainerConfiguration и VirtualMachineConfiguration предварительно извлекают частный образ TensorFlow из частного реестра контейнеров Azure. Здесь используется такая же ссылка на образ, как и в предыдущем примере.
image_ref_to_use = models.BatchVmImageReference(
publisher='microsoft-dsvm',
offer='ubuntu-hpc',
sku='2204',
version='latest')
# Specify a container registry
subscription_id = "yyyy-yyy-yyy-yyy-yyy"
resource_group_name = "TestRG"
user_assigned_identity_name = "testUMI"
resource_id = f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{user_assigned_identity_name}"
container_registry = models.ContainerRegistryReference(
registry_server="myRegistry.azurecr.io",
identity_reference=models.BatchNodeIdentityReference(resource_id=resource_id))
# Create container configuration, prefetching Docker images from the container registry
container_conf = models.BatchContainerConfiguration(
type='dockerCompatible',
container_image_names=["myRegistry.azurecr.io/samples/myImage"],
container_registries=[container_registry])
new_pool = models.BatchPoolCreateOptions(
id="myPool",
virtual_machine_configuration=models.VirtualMachineConfiguration(
image_reference=image_ref_to_use,
container_configuration=container_conf,
node_agent_sku_id='batch.node.ubuntu 22.04'),
vm_size='STANDARD_D2S_V3',
target_dedicated_nodes=1)
// Specify a container registry
BatchVmContainerRegistry containerRegistry = new BatchVmContainerRegistry()
{
RegistryServer = "myContainerRegistry.azurecr.io",
IdentityResourceId = new ResourceIdentifier("/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name")
};
// Create container configuration, prefetching Docker images from the container registry
BatchVmContainerConfiguration containerConfig = new BatchVmContainerConfiguration("dockerCompatible")
{
ContainerImageNames = { "myContainerRegistry.azurecr.io/tensorflow/tensorflow:latest-gpu" },
ContainerRegistries = { containerRegistry }
};
// VM configuration
BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
imageReference: imageReference,
nodeAgentSkuId: "batch.node.ubuntu 22.04")
{
ContainerConfiguration = containerConfig
};
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = "Standard_NC6S_V3",
DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = 2 }
}
};
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, poolId, poolData);
Поддержка управляемой идентичности для ACR
При доступе к контейнерам, хранящимся в Реестр контейнеров Azure, можно использовать управляемое удостоверение для проверки подлинности в службе. Чтобы использовать управляемое удостоверение, сначала убедитесь, что удостоверение было назначено пулу и что удостоверение имеет роль AcrPull, назначенную для реестра контейнеров, к которому вы хотите получить доступ. Затем укажите службе Batch, какой идентификатор использовать для аутентификации в ACR.
BatchVmContainerRegistry containerRegistry = new BatchVmContainerRegistry()
{
RegistryServer = "myContainerRegistry.azurecr.io",
IdentityResourceId = new ResourceIdentifier("/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name")
};
Параметры контейнера для задачи
Чтобы выполнить контейнерную задачу в пуле с поддержкой контейнеров, укажите параметры нужного контейнера. Эти параметры включают используемый образ, реестр и параметры выполнения контейнера.
Используйте свойство
ContainerSettingsв классах задач для настройки параметров конкретного контейнера. Эти параметры определяются классом BatchTaskContainerSettings . Для параметра контейнера--rmне требуется другой параметр--runtime, так как это обеспечивает Batch.При выполнении задач на образах контейнеров задача BatchTask и диспетчера заданий требуют настройки контейнера. Однако начальная задача, задача подготовки заданий и задача выпуска заданий не требуют параметров контейнера (т. е. они могут выполняться в контексте контейнера или непосредственно на узле).
Для Linux Batch сопоставляет контейнеру права доступа пользователя/группы. Если для доступа к какой-либо папке в контейнере требуется разрешение администратора, вам может потребоваться запустить задачу как область пула с уровнем прав администратора. Это гарантирует, что Batch выполняет задачу от имени пользователя root в контексте контейнера. В противном случае у пользователя, отличного от администратора, может не быть доступа к этим папкам.
Для пулов контейнеров с оборудованием с поддержкой GPU служба Batch автоматически включает использование GPU для задач контейнера, поэтому не следует включать аргумент
–gpus.
Командная строка контейнерной задачи
При выполнении контейнерной задачи пакетная служба автоматически применяет команду docker create, чтобы создать контейнер на основе образа, указанного в задаче. Затем Batch управляет выполнением задачи в контейнере.
Как и для задач Batch без контейнеров, для контейнерной задачи необходимо задать командную строку. Так как пакетная служба автоматически создает контейнер, командная строка указывает только команду или команды, выполняемые в контейнере.
Ниже приведены действия пакетной службы по умолчанию, применяемой к задачам контейнера Docker:
- Batch запустит контейнер с указанной в задаче командной строкой как CMD.
- Batch не будет влиять на указанный ENTRYPOINT образа контейнера.
- Batch переопределит WORKDIR на рабочий каталог задачи Batch.
Убедитесь, что вы ознакомились с документацией Docker по поводу ENTRYPOINT и CMD, чтобы понимать особенности их взаимодействия, которые могут возникать, когда в образах контейнеров задан ENTRYPOINT и при этом вы также указываете командную строку задачи.
Если вы хотите переопределить ENTRYPOINT образа контейнера, можно указать аргумент --entrypoint <args> в качестве параметра containerRunOption. Ознакомьтесь с необязательными аргументами ContainerRunOptions , которые можно предоставить команде docker create , которую пакет использует для создания и запуска контейнера. Например, чтобы задать для контейнера рабочий каталог, укажите параметр --workdir <directory>.
Ниже приведено несколько примеров образов контейнеров, параметров контейнера Batch или командных строк задач и их влияния.
- ENTRYPOINT образа контейнера не указан, а команда задачи Batch — "/bin/sh -c python myscript.py".
- Batch создает контейнер в соответствии с указанной командной строкой задачи Batch и запускает его в рабочем каталоге задачи Batch. Это может привести к ошибке, если "myscript.py" не находится в рабочем каталоге задачи Batch.
- Если командная строка задачи была указана как "/bin/sh -c python /path/to/script/myscript.py", эта задача может работать правильно даже с рабочим каталогом, заданным как рабочий каталог пакетной задачи, если все зависимости для скрипта удовлетворены.
- ENTRYPOINT образа контейнера задан как "./myscript.sh", а командная строка пакетной задачи пуста.
- Batch создает контейнер на основе ENTRYPOINT и запускает его в рабочем каталоге задачи Batch. Эта задача может привести к сбою, если образ контейнера WORKDIR не совпадает с рабочим каталогом задачи пакетной службы, который зависит от различных факторов, таких как операционная система, идентификатор задания, идентификатор задачи и т. д.
- Если параметр --workdir /path/to/script был указан как контейнерRunOption, эта задача может работать правильно, если все зависимости для скрипта удовлетворены.
- В образе контейнера не указан ENTRYPOINT, командная строка задачи Batch — "./myscript.sh", а WORKDIR переопределён в ContainerRunOptions как "--workdir /path/to/script".
- Batch создает контейнер с рабочим каталогом, установленным на "/path/to/script", и выполняет команду "./myscript.sh", что завершается успешно, поскольку сценарий найден в указанном рабочем каталоге.
Рабочий каталог для задач контейнера
Контейнерная задача Batch выполняется в рабочем каталоге в контейнере, аналогичном тому, который Batch создает для обычной (неконтейнерной) задачи. Этот рабочий каталог отличается от WORKDIR, если он задан в образе, либо от рабочего каталога контейнера по умолчанию (C:\ в контейнере Windows или / в контейнере Linux).
Для задачи контейнера Batch:
- Все каталоги, рекурсивно расположенные ниже
AZ_BATCH_NODE_ROOT_DIRна узле хоста (корневой каталог пакетная служба Azure), монтируются в контейнер. - Все переменные среды задач сопоставляются с контейнером.
- Рабочий каталог задачи
AZ_BATCH_TASK_WORKING_DIRна узле задаётся так же, как и для обычной задачи, и монтируется в контейнер.
Внимание
Для пулов контейнеров Windows в семействах виртуальных машин с временными дисками весь временный диск сопоставляется с пространством контейнера из-за ограничений контейнеров Windows.
Эти сопоставления позволяют работать с контейнерными задачами почти так же, как с неконтейнерными задачами. Например, вы можете устанавливать приложения с помощью пакетов приложений, обращаться к файлам ресурсов в службе хранилища Azure, настраивать параметры среды для задачи и сохранять выходные файлы задачи после остановки контейнера.
Независимо от того, как задан WORKDIR для образа контейнера, и stdout.txt, и stderr.txt фиксируются в AZ_BATCH_TASK_DIR.
Устранение неполадок с контейнерными задачами
Если ваша контейнерная задача работает не так, как ожидалось, вам будет полезно получить сведения о конфигурации WORKDIR или ENTRYPOINT для образа контейнера. Чтобы просмотреть конфигурацию, запустите команду docker image inspect.
Если потребуется, скорректируйте настройки задачи контейнера на основе образа:
- Укажите абсолютный путь в командной строке задания. Если в командной строке задачи используется ENTRYPOINT, заданный в образе по умолчанию, убедитесь, что указан абсолютный путь.
- В параметрах выполнения контейнера для задачи измените рабочую папку, чтобы она соответствовала папке WORKDIR в образе. Например, установите значение
--workdir /app.
Примеры контейнерных задач
В приведенном ниже фрагменте кода Python показана базовая командная строка, которая выполняется в контейнере, созданном на основе фиктивного образа из центра Docker. Здесь параметр контейнера --rm означает удаление контейнера после выполнения задачи, а параметр --workdir задает рабочую папку. Эта командная строка переопределяет заданное в контейнере значение ENTRYPOINT, заменяя его простой командой оболочки для создания небольшого файла в рабочей папке задачи на узле.
task_id = 'sampletask'
task_container_settings = models.BatchTaskContainerSettings(
image_name='myimage',
container_run_options='--rm --workdir /')
task = models.BatchTaskCreateOptions(
id=task_id,
command_line='/bin/sh -c \"echo \'hello world\' > $AZ_BATCH_TASK_WORKING_DIR/output.txt\"',
container_settings=task_container_settings
)
В следующем примере на C# показаны основные параметры контейнера для задачи, выполняемой в облаке:
// Simple container task command
string cmdLine = @"c:\app\myApp.exe";
Azure.Compute.Batch.BatchTaskContainerSettings cmdContainerSettings = new Azure.Compute.Batch.BatchTaskContainerSettings("myimage")
{
ContainerRunOptions = @"--rm --workdir c:\app"
};
BatchTaskCreateOptions containerTask = new BatchTaskCreateOptions(
id: "Task1",
commandLine: cmdLine)
{
ContainerSettings = cmdContainerSettings
};
Следующие шаги
- Сведения об установке и использовании Docker CE в Linux см. в документации Docker.
- Узнайте, как использовать управляемый образ для создания настраиваемого пула образов.
- Узнайте больше о проекте Moby — платформе для создания контейнерных систем.