Azure Batch gebruiken om containerworkloads uit te voeren

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Overweeg uw gebruik en planning dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Met Azure Batch kunt u grote aantallen batch-rekentaken uitvoeren en schalen in Azure. Batchtaken kunnen rechtstreeks worden uitgevoerd op virtuele machines (nodes) in een Batch-groep, maar u kunt ook een Batch-groep instellen om taken uit te voeren in containers die compatibel zijn met Docker op de nodes. In dit bericht leest u hoe u een groep met rekennodes maakt die ondersteuning bieden voor het uitvoeren van containertaken en vervolgens containertaken uitvoert in de groep.

De codevoorbeelden hier gebruiken de Batch .NET- en Python SDK's. U kunt ook andere Batch SDK's en hulpprogramma's, waaronder Azure Portal, gebruiken om Batch-pools met containerfuncties te maken en containertaken uit te voeren.

Redenen om containers te gebruiken

Containers bieden een eenvoudige manier om Batch-taken uit te voeren zonder dat u een omgeving en afhankelijkheden hoeft te beheren om toepassingen uit te voeren. Containers implementeren toepassingen als lichtgewicht, draagbare, zelfvoorzienende eenheden die in verschillende omgevingen kunnen worden uitgevoerd. Bouw en test bijvoorbeeld een container lokaal en upload de containerinstallatiekopieën naar een register in Azure of elders. Het containerimplementatiemodel zorgt ervoor dat de runtime-omgeving van uw toepassing altijd correct is geïnstalleerd en geconfigureerd waar u de toepassing ook host. Op containers gebaseerde taken in Batch kunnen ook profiteren van functies van niet-containertaken, waaronder toepassingspakketten en beheer van resourcebestanden en uitvoerbestanden.

Vereisten

U moet bekend zijn met containerconcepten en hoe u een Batch-pool en -taak maakt.

  • SDK-versies: De Batch SDK's ondersteunen containerinstallatiekopieën vanaf de volgende versies:

    • Batch REST API-versie 2017-09-01.6.0
    • Batch .NET SDK versie 8.0.0
    • Batch Python SDK versie 4.0
    • Batch Java SDK versie 3.0
    • Batch Node.js SDK versie 3.0
  • Accounts: In uw Azure-abonnement moet u een Batch-account en eventueel een Azure Storage-account maken.

  • Een ondersteunde VM-installatiekopieën (virtuele machine): containers worden alleen ondersteund in pools die zijn gemaakt met de configuratie van de virtuele machine, op basis van een ondersteunde installatiekopieën (vermeld in de volgende sectie). Als u een aangepaste installatiekopieën opgeeft, raadpleegt u de overwegingen in de volgende sectie en de vereisten in Een beheerde installatiekopieën gebruiken om een aangepaste installatiekopieëngroep te maken.

Notitie

Van Batch SDK-versies:

  • Batch .NET SDK versie 16.0.0
  • Batch Python SDK versie 14.0.0
  • Batch Java SDK versie 11.0.0
  • Batch Node.js SDK versie 11.0.0

Op dit moment moet Type de containerConfiguration eigenschap worden doorgegeven en de ondersteunde waarden zijn: ContainerType.DockerCompatible en ContainerType.CriCompatible.

Houd rekening met de volgende beperkingen:

  • Batch biedt alleen RDMA-ondersteuning (Remote Direct Memory Access) voor containers die worden uitgevoerd in Linux-pools.
  • Voor Windows-containerworkloads moet u een VM-grootte met meerdere kernen voor uw pool kiezen.

Belangrijk

Docker maakt standaard een netwerkbrug met een subnetspecificatie van 172.17.0.0/16. Als u een virtueel netwerk voor uw pool opgeeft, moet u ervoor zorgen dat er geen conflicterende IP-bereiken zijn.

Ondersteunde VM-installatiekopieën

Gebruik een van de volgende ondersteunde Windows- of Linux-installatiekopieën om een pool met VM-rekenknooppunten te maken voor containerworkloads. Zie Lijst met installatiekopieën van virtuele machines voor meer informatie over Marketplace-installatiekopieën die compatibel zijn met Batch.

Windows-ondersteuning

Batch ondersteunt Windows-serverinstallatiekopieën met containerondersteuningsaanduidingen. De API voor het weergeven van alle ondersteunde installatiekopieën in Batch geeft een DockerCompatible mogelijkheid aan als de installatiekopieën Docker-containers ondersteunen. Batch staat toe, maar biedt geen rechtstreekse ondersteuning voor afbeeldingen die zijn gepubliceerd door Mirantis met de mogelijkheid die wordt vermeld als DockerCompatible. Deze installatiekopieën kunnen alleen worden geïmplementeerd onder een Batch-account voor de pooltoewijzingsmodus Gebruikersabonnement.

U kunt ook een aangepaste installatiekopieën maken om containerfunctionaliteit in Windows in te schakelen.

Notitie

De installatiekopieën-SKU's -with-containers of -with-containers-smalldisk worden buiten gebruik gesteld. Zie de aankondiging voor details en alternatieve opties voor containerruntime.

Ondersteuning voor Linux

Voor Linux-containerworkloads ondersteunt Batch momenteel de volgende Linux-installatiekopieën die zijn gepubliceerd in Azure Marketplace zonder dat hiervoor een aangepaste installatiekopieën nodig zijn.

  • Publisher: microsoft-dsvm
    • Bieden: ubuntu-hpc

Alternatieve afbeeldingsopties

Er zijn momenteel andere installatiekopieën die microsoft-azure-batch ondersteuning bieden voor containerworkloads:

  • Publisher: microsoft-azure-batch
    • Bieden: centos-container
    • Aanbieding: centos-container-rdma (Voor exclusief gebruik op VM-SKU's met Infiniband)
    • Bieden: ubuntu-server-container
    • Aanbieding: ubuntu-server-container-rdma (Voor exclusief gebruik op VM-SKU's met Infiniband)

Belangrijk

Het wordt aanbevolen om de microsoft-dsvmubuntu-hpc VM-installatiekopieën te gebruiken in plaats van installatiekopieën die zijn gepubliceerd door microsoft-azure-batch. Deze installatiekopieën kunnen worden gebruikt op elke VM-SKU.

Opmerkingen

De docker-gegevenshoofdmap van de bovenstaande installatiekopieën bevindt zich op verschillende plaatsen:

  • Voor de gepubliceerde microsoft-azure-batch Azure Batch-installatiekopieën (Aanbieding: centos-container-rdma, enzovoort) wordt de docker-gegevenshoofdmap toegewezen aan /mnt/batch/docker, die zich op de tijdelijke schijf bevindt.
  • Voor de HPC-installatiekopieën of microsoft-dsvm (Offer: ubuntu-hpc, enzovoort) is de docker-gegevenshoofdmap ongewijzigd van de Docker-standaard, namelijk /var/lib/docker in Linux en C:\ProgramData\Docker in Windows. Deze mappen bevinden zich op de besturingssysteemschijf.

Voor niet-Batch gepubliceerde installatiekopieën bestaat het risico dat de besturingssysteemschijf snel wordt opgevuld wanneer containerinstallatiekopieën worden gedownload.

Mogelijke oplossingen voor klanten

Wijzig de docker-gegevenshoofdmap in een begintaak bij het maken van een pool in BatchExplorer. Hier volgt een voorbeeld van de opdracht Taak starten:

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

Deze installatiekopieën worden alleen ondersteund voor gebruik in Azure Batch-pools en zijn afgestemd op de uitvoering van Docker-containers. Ze hebben de volgende functies:

  • Een vooraf geïnstalleerde Docker-compatibele Moby-containerruntime.
  • Vooraf geïnstalleerde NVIDIA GPU-stuurprogramma's en NVIDIA-containerruntime, om de implementatie te stroomlijnen op vm's uit de Azure N-serie.
  • VM-installatiekopieën met het achtervoegsel -rdma zijn vooraf geconfigureerd met ondersteuning voor InfiniBand RDMA-VM-grootten. Deze VM-installatiekopieën mogen niet worden gebruikt met VM-grootten die geen Ondersteuning voor InfiniBand hebben.

U kunt ook aangepaste installatiekopieën maken die compatibel zijn met Batch-containers op een van de Linux-distributies die compatibel zijn met Batch. Installeer voor Docker-ondersteuning op een aangepaste installatiekopieën een geschikte Docker-compatibele runtime, zoals een versie van Docker of Mirantis Container Runtime. Het installeren van alleen een docker-CLI-compatibel hulpprogramma is onvoldoende; er is een compatibele Runtime voor Docker Engine vereist.

Belangrijk

Microsoft of Azure Batch biedt geen ondersteuning voor problemen met betrekking tot Docker (een versie of editie), Mirantis Container Runtime of Moby-runtimes. Klanten die ervoor kiezen om deze runtimes in hun installatiekopieën te gebruiken, moeten contact opnemen met het bedrijf of de entiteit die ondersteuning biedt voor runtimeproblemen.

Meer overwegingen voor het gebruik van een aangepaste Linux-installatiekopieën:

  • Als u wilt profiteren van de GPU-prestaties van grootten uit de Azure N-serie wanneer u een aangepaste installatiekopieën gebruikt, installeert u NVIDIA-stuurprogramma's vooraf. U moet ook het Docker Engine Utility installeren voor NVIDIA GPU's, NVIDIA Docker.
  • Gebruik een VM-grootte die geschikt is voor RDMA om toegang te krijgen tot het Azure RDMA-netwerk. Vereiste RDMA-stuurprogramma's worden geïnstalleerd in de CentOS HPC- en Ubuntu-installatiekopieën die worden ondersteund door Batch. Er is mogelijk extra configuratie nodig om MPI-workloads uit te voeren. Zie RDMA- of GPU-exemplaren gebruiken in Batch-pool.

Containerconfiguratie voor Batch-pool

Als u een Batch-pool wilt inschakelen voor het uitvoeren van containerworkloads, moet u ContainerConfiguration-instellingen opgeven in het VirtualMachineConfiguration-object van de pool. Dit artikel bevat koppelingen naar de Batch .NET API-verwijzing. De bijbehorende instellingen bevinden zich in de Batch Python-API .

U kunt een pool met of zonder vooraf gemaakte containerinstallatiekopieën maken, zoals wordt weergegeven in de volgende voorbeelden. Met het pull-proces (of prefetch) kunt u containerinstallatiekopieën vooraf laden vanuit Docker Hub of een ander containerregister op internet. Gebruik voor de beste prestaties een Azure-containerregister in dezelfde regio als het Batch-account.

Het voordeel van het vooraf fetching van containerinstallatiekopieën is dat wanneer taken voor het eerst worden uitgevoerd, ze niet hoeven te wachten totdat de containerinstallatiekopieën zijn gedownload. Met de containerconfiguratie worden containerinstallatiekopieën naar de VM's opgehaald wanneer de pool wordt gemaakt. Taken die in de pool worden uitgevoerd, kunnen vervolgens verwijzen naar de lijst met containerinstallatiekopieën en opties voor het uitvoeren van containers.

Pool zonder vooraf gemaakte containerinstallatiekopieën

Als u een pool met container wilt configureren zonder vooraf gemaakte containerinstallatiekopieën, definieert ContainerConfiguration en VirtualMachineConfiguration objecten, zoals wordt weergegeven in de volgende voorbeelden. In deze voorbeelden wordt de installatiekopie van Ubuntu Server voor Azure Batch-containergroepen uit Marketplace gebruikt.

Opmerking: Ubuntu-serverversie die in het voorbeeld wordt gebruikt, is bedoeld voor illustratiedoeleinden. U kunt de node_agent_sku_id wijzigen in de versie die u gebruikt.

image_ref_to_use = batch.models.ImageReference(
    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 = batch.models.ContainerConfiguration()

new_pool = batch.models.PoolAddParameter(
    id=pool_id,
    virtual_machine_configuration=batch.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)
...
ImageReference imageReference = new ImageReference(
    publisher: "microsoft-dsvm",
    offer: "ubuntu-hpc",
    sku: "2204",
    version: "latest");

// Specify container configuration. This is required even though there are no prefetched images.
ContainerConfiguration containerConfig = new ContainerConfiguration();

// VM configuration
VirtualMachineConfiguration virtualMachineConfiguration = new VirtualMachineConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.ubuntu 22.04");
virtualMachineConfiguration.ContainerConfiguration = containerConfig;

// Create pool
CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 1,
    virtualMachineSize: "STANDARD_D2S_V3",
    virtualMachineConfiguration: virtualMachineConfiguration);

Installatiekopieën vooraf fetch voor containerconfiguratie

Als u containerinstallatiekopieën in de pool vooraf wilt instellen, voegt u de lijst met containerinstallatiekopieën (container_image_names in Python) toe aan de ContainerConfiguration.

In het volgende eenvoudige Python-voorbeeld ziet u hoe u een standaard Ubuntu-containerinstallatiekopie kunt voorbereiden vanuit Docker Hub.

image_ref_to_use = batch.models.ImageReference(
    publisher='microsoft-dsvm',
    offer='ubuntu-hpc',
    sku='2204',
    version='latest')

"""
Specify container configuration, fetching the official Ubuntu container image from Docker Hub.
"""

container_conf = batch.models.ContainerConfiguration(
    container_image_names=['ubuntu'])

new_pool = batch.models.PoolAddParameter(
    id=pool_id,
    virtual_machine_configuration=batch.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)
...

In het volgende C#-voorbeeld wordt ervan uitgegaan dat u een TensorFlow-installatiekopieën van Docker Hub vooraf wilt maken. Dit voorbeeld bevat een begintaak die wordt uitgevoerd op de VM-host op de poolknooppunten. U kunt bijvoorbeeld een begintaak uitvoeren op de host om een bestandsserver te koppelen die toegankelijk is vanuit de containers.

ImageReference imageReference = new ImageReference(
    publisher: "microsoft-dsvm",
    offer: "ubuntu-hpc",
    sku: "2204",
    version: "latest");

ContainerRegistry containerRegistry = new ContainerRegistry(
    registryServer: "https://hub.docker.com",
    userName: "UserName",
    password: "YourPassword"
);

// Specify container configuration, prefetching Docker images
ContainerConfiguration containerConfig = new ContainerConfiguration();
containerConfig.ContainerImageNames = new List<string> { "tensorflow/tensorflow:latest-gpu" };
containerConfig.ContainerRegistries = new List<ContainerRegistry> { containerRegistry };

// VM configuration
VirtualMachineConfiguration virtualMachineConfiguration = new VirtualMachineConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.ubuntu 22.04");
virtualMachineConfiguration.ContainerConfiguration = containerConfig;

// Set a native host command line start task
StartTask startTaskContainer = new StartTask( commandLine: "<native-host-command-line>" );

// Create pool
CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    virtualMachineSize: "Standard_NC6S_V3",
    virtualMachineConfiguration: virtualMachineConfiguration);

// Start the task in the pool
pool.StartTask = startTaskContainer;
...

Installatiekopieën vooraf uit een privécontainerregister

U kunt ook containerinstallatiekopieën vooraf instellen door te verifiëren bij een privécontainerregisterserver. In de volgende voorbeelden maken de ContainerConfiguration en VirtualMachineConfiguration objecten vooraf een privé-TensorFlow-installatiekopie uit een privé-Azure-containerregister. De afbeeldingsreferentie is hetzelfde als in het vorige voorbeeld.

image_ref_to_use = batch.models.ImageReference(
    publisher='microsoft-dsvm',
    offer='ubuntu-hpc',
    sku='2204',
    version='latest')

# Specify a container registry
container_registry = batch.models.ContainerRegistry(
        registry_server="myRegistry.azurecr.io",
        user_name="myUsername",
        password="myPassword")

# Create container configuration, prefetching Docker images from the container registry
container_conf = batch.models.ContainerConfiguration(
        container_image_names = ["myRegistry.azurecr.io/samples/myImage"],
        container_registries =[container_registry])

new_pool = batch.models.PoolAddParameter(
            id="myPool",
            virtual_machine_configuration=batch.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
ContainerRegistry containerRegistry = new ContainerRegistry(
    registryServer: "myContainerRegistry.azurecr.io",
    userName: "myUserName",
    password: "myPassword");

// Create container configuration, prefetching Docker images from the container registry
ContainerConfiguration containerConfig = new ContainerConfiguration();
containerConfig.ContainerImageNames = new List<string> {
        "myContainerRegistry.azurecr.io/tensorflow/tensorflow:latest-gpu" };
containerConfig.ContainerRegistries = new List<ContainerRegistry> { containerRegistry } );

// VM configuration
VirtualMachineConfiguration virtualMachineConfiguration = new VirtualMachineConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.ubuntu 22.04");
virtualMachineConfiguration.ContainerConfiguration = containerConfig;

// Create pool
CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 2,
    virtualMachineSize: "Standard_NC6S_V3",
    virtualMachineConfiguration: virtualMachineConfiguration);
...

Ondersteuning voor beheerde identiteiten voor ACR

Wanneer u toegang krijgt tot containers die zijn opgeslagen in Azure Container Registry, kan een gebruikersnaam/wachtwoord of een beheerde identiteit worden gebruikt om te verifiëren met de service. Als u een beheerde identiteit wilt gebruiken, moet u eerst controleren of de identiteit is toegewezen aan de pool en of de identiteit de AcrPull rol heeft toegewezen voor het containerregister waartoe u toegang wilt hebben. Geef vervolgens Batch de opdracht met welke identiteit moet worden gebruikt bij het verifiëren met ACR.

ContainerRegistry containerRegistry = new ContainerRegistry(
    registryServer: "myContainerRegistry.azurecr.io",
    identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name" }
);

// Create container configuration, prefetching Docker images from the container registry
ContainerConfiguration containerConfig = new ContainerConfiguration();
containerConfig.ContainerImageNames = new List<string> {
        "myContainerRegistry.azurecr.io/tensorflow/tensorflow:latest-gpu" };
containerConfig.ContainerRegistries = new List<ContainerRegistry> { containerRegistry } );

// VM configuration
VirtualMachineConfiguration virtualMachineConfiguration = new VirtualMachineConfiguration(
    imageReference: imageReference,
    nodeAgentSkuId: "batch.node.ubuntu 22.04");
virtualMachineConfiguration.ContainerConfiguration = containerConfig;

// Create pool
CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 2,
    virtualMachineSize: "Standard_NC6S_V3",
    virtualMachineConfiguration: virtualMachineConfiguration);
...

Containerinstellingen voor de taak

Als u een containertaak wilt uitvoeren in een pool met containermogelijkheden, geeft u containerspecifieke instellingen op. Instellingen de installatiekopieën opnemen die u wilt gebruiken, registeren en uitvoeren van containers.

  • Gebruik de ContainerSettings eigenschap van de taakklassen om containerspecifieke instellingen te configureren. Deze instellingen worden gedefinieerd door de klasse TaskContainer Instellingen. Voor de --rm containeroptie is geen andere --runtime optie vereist, omdat deze wordt geregeld door Batch.

  • Als u taken uitvoert op containerinstallatiekopieën, zijn voor de cloudtaak en taakbeheer containerinstellingen vereist. Voor de begintaak, taakvoorbereidingstaak en taakreleasetaak zijn echter geen containerinstellingen vereist (dat wil gezegd, ze kunnen worden uitgevoerd binnen een containercontext of rechtstreeks op het knooppunt).

  • Voor Linux wijst Batch de machtiging gebruiker/groep toe aan de container. Als voor toegang tot een map in de container Beheer istratormachtigingen zijn vereist, moet u de taak mogelijk uitvoeren als poolbereik met het niveau van beheerderstoestemming. Dit zorgt ervoor dat Batch de taak uitvoert als hoofdmap in de containercontext. Anders heeft een niet-beheerder mogelijk geen toegang tot deze mappen.

  • Voor containergroepen met hardware met GPU schakelt Batch automatisch GPU in voor containertaken, dus u moet het –gpus argument niet opnemen.

Opdrachtregel voor containertaak

Wanneer u een containertaak uitvoert, gebruikt Batch automatisch de opdracht docker create om een container te maken met behulp van de installatiekopieën die in de taak zijn opgegeven. Batch beheert vervolgens de taakuitvoering in de container.

Net als bij niet-container Batch-taken stelt u een opdrachtregel in voor een containertaak. Omdat Batch automatisch de container maakt, geeft de opdrachtregel alleen de opdrachten of opdrachten op die in de container worden uitgevoerd.

Als de containerinstallatiekopie voor een Batch-taak is geconfigureerd met een ENTRYPOINT-script , kunt u de opdrachtregel zo instellen dat u het standaardINVOERPUNT gebruikt of overschrijft:

  • Als u het standaardINVOERPUNT van de containerinstallatiekopie wilt gebruiken, stelt u de opdrachtregel van de taak in op de lege tekenreeks "".

  • Als u het standaardINVOERPUNT wilt overschrijven, voegt u het --entrypoint argument toe, bijvoorbeeld: --entrypoint "/bin/sh - python"

  • Als de installatiekopie geen ENTRYPOINT heeft, stelt u bijvoorbeeld een opdrachtregel in die geschikt is voor de container of /app/myapp/bin/sh -c python myscript.py

Optionele ContainerRunOptions zijn andere argumenten die u opgeeft voor de docker create opdracht die Batch gebruikt om de container te maken en uit te voeren. Als u bijvoorbeeld een werkmap voor de container wilt instellen, stelt u de --workdir <directory> optie in. Zie de docker-verwijzing voor meer opties.

Werkmap containertaak

Een Batch-containertaak wordt uitgevoerd in een werkmap in de container die vergelijkbaar is met de map die Batch instelt voor een reguliere (niet-container)-taak. Deze werkmap verschilt van de WORKDIR als deze is geconfigureerd in de installatiekopieën, of de standaardwerkmap voor containers (C:\ in een Windows-container of / in een Linux-container).

Voor een Batch-containertaak:

  • Alle mappen recursief onder het AZ_BATCH_NODE_ROOT_DIR hostknooppunt (de hoofdmap van Azure Batch-directory's) worden toegewezen aan de container.
  • Alle omgevingsvariabelen voor taken worden toegewezen aan de container.
  • De werkmap AZ_BATCH_TASK_WORKING_DIR van de taak op het knooppunt wordt hetzelfde ingesteld als voor een normale taak en toegewezen aan de container.

Belangrijk

Voor Windows-containergroepen op VM-families met tijdelijke schijven wordt de hele tijdelijke schijf toegewezen aan containerruimte vanwege beperkingen van Windows-containers.

Met deze toewijzingen kunt u op dezelfde manier met containertaken werken als niet-containertaken. Installeer bijvoorbeeld toepassingen met behulp van toepassingspakketten, open resourcebestanden uit Azure Storage, gebruik taakomgevingsinstellingen en bewaar taakuitvoerbestanden nadat de container is gestopt.

Problemen met containertaken oplossen

Als uw containertaak niet wordt uitgevoerd zoals verwacht, moet u mogelijk informatie ophalen over de WORKDIR- of ENTRYPOINT-configuratie van de containerinstallatiekopieën. Als u de configuratie wilt zien, voert u de inspect-opdracht van de Docker-installatiekopieën uit.

Pas indien nodig de instellingen van de containertaak aan op basis van de installatiekopieën:

  • Geef een absoluut pad op in de opdrachtregel van de taak. Als het standaardINVOERPOINT van de installatiekopie wordt gebruikt voor de opdrachtregel van de taak, controleert u of er een absoluut pad is ingesteld.
  • Wijzig in de opties voor het uitvoeren van de container van de taak de werkmap zodat deze overeenkomt met de WORKDIR in de installatiekopieën. Stel bijvoorbeeld --workdir /appin.

Voorbeelden van containertaken

In het volgende Python-fragment ziet u een eenvoudige opdrachtregel die wordt uitgevoerd in een container die is gemaakt op basis van een fictieve installatiekopie die is opgehaald uit Docker Hub. Hier verwijdert de --rm containeroptie de container nadat de taak is voltooid en wordt --workdir een werkmap ingesteld. De opdrachtregel overschrijft de container ENTRYPOINT met een eenvoudige shell-opdracht waarmee een klein bestand naar de werkmap van de taak op de host wordt geschreven.

task_id = 'sampletask'
task_container_settings = batch.models.TaskContainerSettings(
    image_name='myimage',
    container_run_options='--rm --workdir /')
task = batch.models.TaskAddParameter(
    id=task_id,
    command_line='/bin/sh -c \"echo \'hello world\' > $AZ_BATCH_TASK_WORKING_DIR/output.txt\"',
    container_settings=task_container_settings
)

In het volgende C#-voorbeeld ziet u basiscontainerinstellingen voor een cloudtaak:

// Simple container task command
string cmdLine = "c:\\app\\myApp.exe";

TaskContainerSettings cmdContainerSettings = new TaskContainerSettings (
    imageName: "myimage",
    containerRunOptions: "--rm --workdir c:\\app"
    );

CloudTask containerTask = new CloudTask (
    id: "Task1",
    commandline: cmdLine);
containerTask.ContainerSettings = cmdContainerSettings;

Volgende stappen