Menggunakan Azure Batch untuk menjalankan beban kerja kontainer

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan perencanaan Anda yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Azure Batch memungkinkan Anda menjalankan dan menskalakan sejumlah besar pekerjaan komputasi batch di Azure. Tugas batch dapat berjalan langsung pada mesin virtual (node) di kumpulan Batch, tetapi Anda juga dapat menyiapkan kumpulan Batch untuk menjalankan tugas dalam kontainer yang kompatibel dengan Docker di node. Artikel ini menunjukkan cara membuat kumpulan node komputasi yang mendukung menjalankan tugas kontainer, lalu menjalankan tugas kontainer di kumpulan.

Contoh kode di sini menggunakan Batch .NET dan Python SDK. Anda juga dapat menggunakan SDK dan alat Batch lainnya, termasuk portal Azure, untuk membuat kumpulan Batch yang diaktifkan kontainer dan menjalankan tugas kontainer.

Mengapa menggunakan kontainer?

Kontainer menyediakan cara mudah untuk menjalankan tugas Batch tanpa harus mengelola lingkungan dan dependensi untuk menjalankan aplikasi. Kontainer menyebarkan aplikasi sebagai unit yang ringan, portabel, dan mandiri yang dapat berjalan di beberapa lingkungan yang berbeda. Misalnya, bangun dan uji kontainer secara lokal, kemudian unggah gambar kontainer ke registri di Azure atau di tempat lain. Model penerapan kontainer memastikan bahwa lingkungan runtime aplikasi Anda selalu diinstal dan dikonfigurasi dengan benar di mana pun Anda menghosting aplikasi. Tugas berbasis kontainer di Batch juga dapat memanfaatkan fitur tugas bukan kontainer, termasuk paket aplikasi dan manajemen file sumber daya serta file output.

Prasyarat

Anda harus terbiasa dengan konsep kontainer dan cara membuat kumpulan batch dan pekerjaan.

  • Versi SDK: SDK Batch mendukung gambar kontainer sebagai versi berikut:

    • Batch REST API versi 2017-09-01.6.0
    • Batch .NET SDK versi 8.0.0
    • Batch Python SDK versi 4.0
    • Batch Java SDK versi 3.0
    • Batch Node.js SDK versi 3.0
  • Akun: Di langganan Azure, Anda harus membuat akun Batch dan akun Azure Storage secara opsional.

  • Gambar komputer virtual (VM) yang didukung: Kontainer hanya didukung dalam kumpulan yang dibuat dengan Konfigurasi Komputer Virtual, dari gambar yang didukung (tercantum di bagian berikutnya). Jika Anda menyediakan gambar kustom, lihat pertimbangan di bagian berikut dan persyaratan dalam Menggunakan gambar terkelola untuk membuat kumpulan gambar kustom.

Catatan

Dari versi Batch SDK:

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

Saat ini, containerConfiguration properti yang Type diperlukan untuk diteruskan dan nilai yang didukung adalah: ContainerType.DockerCompatible dan ContainerType.CriCompatible.

Ingatlah batasan berikut:

  • Batch menyediakan dukungan akses memori langsung jarak jauh (RDMA) hanya untuk kontainer yang berjalan pada kumpulan Linux.
  • Untuk beban kerja kontainer Windows, Anda harus memilih ukuran VM multicore untuk kumpulan Anda.

Penting

Docker, secara default, akan membuat jembatan jaringan dengan spesifikasi subnet .172.17.0.0/16 Jika Anda menentukan jaringan virtual untuk kumpulan Anda, pastikan bahwa tidak ada rentang IP yang bertentangan.

Gambar VM yang didukung

Gunakan salah satu gambar Windows atau Linux yang didukung berikut untuk membuat kumpulan node komputasi VM untuk beban kerja kontainer. Untuk informasi selengkapnya tentang gambar Marketplace yang kompatibel dengan Batch, lihat Daftar gambar mesin virtual.

Dukungan Windows

Batch mendukung gambar server Windows yang memiliki penunjukan dukungan kontainer. API untuk mencantumkan semua gambar yang didukung di Batch menunjukkan DockerCompatible kemampuan jika gambar mendukung kontainer Docker. Batch memungkinkan, tetapi tidak secara langsung mendukung, gambar yang diterbitkan oleh Mirantis dengan kemampuan yang disebutkan sebagai DockerCompatible. Gambar-gambar ini hanya dapat disebarkan di bawah akun Batch mode alokasi kumpulan Langganan Pengguna.

Anda juga dapat membuat gambar kustom untuk mengaktifkan fungsionalitas kontainer di Windows.

Catatan

SKU -with-containers gambar atau -with-containers-smalldisk dihentikan. Silakan lihat pengumuman untuk detail dan opsi runtime kontainer alternatif.

Dukungan Linux

Untuk beban kerja kontainer Linux, Batch saat ini mendukung gambar Linux berikut yang diterbitkan di Marketplace Azure tanpa perlu gambar kustom.

  • Penerbit: microsoft-dsvm
    • Penawaran: ubuntu-hpc

Opsi gambar alternatif

Saat ini ada gambar lain yang diterbitkan oleh microsoft-azure-batch yang mendukung beban kerja kontainer:

  • Penerbit: microsoft-azure-batch
    • Penawaran: centos-container
    • Penawaran: centos-container-rdma (Untuk digunakan secara eksklusif pada SKU VM dengan Infiniband)
    • Penawaran: ubuntu-server-container
    • Penawaran: ubuntu-server-container-rdma (Untuk digunakan secara eksklusif pada SKU VM dengan Infiniband)

Penting

Disarankan untuk menggunakan microsoft-dsvmubuntu-hpc gambar VM alih-alih gambar yang diterbitkan oleh microsoft-azure-batch. Gambar ini dapat digunakan pada SKU VM apa pun.

Catatan

Akar data docker dari gambar di atas terletak di tempat yang berbeda:

  • Untuk gambar yang diterbitkan microsoft-azure-batch Azure Batch (Penawaran: centos-container-rdma, dll.), akar data docker dipetakan ke /mnt/batch/docker, yang terletak di disk sementara.
  • Untuk gambar HPC, atau microsoft-dsvm (Penawaran: ubuntu-hpc, dll.), akar data docker tidak berubah dari default Docker, yaitu /var/lib/docker di Linux dan C:\ProgramData\Docker di Windows. Folder ini terletak di disk OS.

Untuk gambar yang diterbitkan non-Batch, disk OS memiliki potensi risiko diisi dengan cepat karena gambar kontainer diunduh.

Solusi potensial untuk pelanggan

Ubah akar data docker dalam tugas mulai saat membuat kumpulan di BatchExplorer. Berikut adalah contoh perintah Mulai Tugas:

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

Gambar-gambar ini hanya didukung untuk digunakan di kumpulan Azure Batch dan ditujukan untuk eksekusi kontainer Docker. Mereka menampilkan:

  • Runtime kontainer Moby yang kompatibel dengan Docker yang telah diinstal sebelumnya.
  • Driver GPU NVIDIA dan runtime kontainer NVIDIA yang telah diinstal sebelumnya, untuk menyederhanakan penyebaran pada VM seri N Azure.
  • Gambar VM dengan akhiran -rdma telah dikonfigurasi sebelumnya dengan dukungan untuk ukuran VM RDMA InfiniBand. Gambar VM ini tidak boleh digunakan dengan ukuran VM yang tidak memiliki dukungan InfiniBand.

Anda juga dapat membuat gambar kustom yang kompatibel untuk kontainer Batch pada salah satu distribusi Linux yang kompatibel dengan Batch. Untuk dukungan Docker pada gambar kustom, instal runtime yang kompatibel dengan Docker yang sesuai, seperti versi Docker atau Mirantis Container Runtime. Menginstal hanya alat yang kompatibel dengan Docker-CLI tidak cukup; Runtime yang kompatibel dengan Docker Engine diperlukan.

Penting

Baik Microsoft atau Azure Batch tidak akan memberikan dukungan untuk masalah yang terkait dengan Docker (versi atau edisi apa pun), Mirantis Container Runtime, atau runtime Moby. Pelanggan yang memilih untuk menggunakan runtime ini dalam gambar mereka harus menjangkau perusahaan atau entitas yang menyediakan dukungan untuk masalah runtime.

Pertimbangan lainnya untuk menggunakan gambar Linux kustom:

  • Untuk memanfaatkan performa GPU ukuran Azure N-series saat menggunakan gambar kustom, driver NVIDIA yang diinstal sebelumnya. Juga, Anda perlu menginstal Utilitas Mesin Docker untuk GPU NVIDIA, NVIDIA Docker.
  • Untuk mengakses jaringan Azure RDMA, gunakan ukuran VM berkemampuan RDMA. Driver RDMA yang diperlukan diinstal di gambar CentOS HPC dan Ubuntu yang didukung oleh Batch. Konfigurasi tambahan mungkin diperlukan untuk menjalankan beban kerja MPI. Lihat Menggunakan instans RDMA atau GPU di kumpulan Batch.

Konfigurasi kontainer untuk kumpulan Batch

Untuk mengaktifkan kumpulan Batch untuk menjalankan beban kerja kontainer, Anda harus menentukan pengaturan ContainerConfiguration di objek VirtualMachineConfiguration kumpulan. Artikel ini menyediakan tautan ke referensi Batch .NET API. Pengaturan yang sesuai ada di API Python Batch.

Anda dapat membuat kumpulan yang mendukung kontainer dengan atau tanpa gambar kontainer yang diambil sebelumnya, seperti yang ditunjukkan dalam contoh berikut. Proses pull (atau prefetch) memungkinkan Anda memuat gambar kontainer sebelumnya dari Docker Hub atau registri kontainer lain di Internet. Untuk performa terbaik, gunakan registri kontainer Azure di wilayah yang sama dengan akun Batch.

Keuntungan dari mengambil gambar kontainer sebelumnya adalah bahwa ketika tugas pertama mulai berjalan, tugas tidak perlu menunggu gambar kontainer diunduh. Konfigurasi kontainer menarik gambar kontainer ke VM ketika kumpulan dibuat. Tugas yang berjalan di kumpulan selanjutnya dapat mereferensikan daftar gambar kontainer dan opsi jalankan kontainer.

Kumpulan tanpa gambar kontainer yang diambil sebelumnya

Anda dapat membuat kumpulan yang mendukung kontainer tanpa gambar kontainer yang diambil sebelumnya, tentukan ContainerConfiguration dan VirtualMachineConfiguration seperti yang ditunjukkan dalam contoh berikut. Contoh-contoh ini menggunakan gambar kumpulan kontainer Server Ubuntu untuk Azure Batch dari Marketplace.

Catatan: Versi server Ubuntu yang digunakan dalam contoh adalah untuk tujuan ilustrasi. Jangan ragu untuk mengubah node_agent_sku_id ke versi yang Anda gunakan.

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

Gambar yang diambil sebelumnya untuk konfigurasi kontainer

Untuk mengambil gambar kontainer di kumpulan, tambahkan daftar gambar kontainer (container_image_names di Python) ke ContainerConfiguration.

Contoh Python dasar berikut menunjukkan cara mengambil gambar kontainer Ubuntu standar terlebih dahulu dari 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)
...

Contoh C# berikut mengasumsikan bahwa Anda ingin mengambil gambar TensorFlow terlebih dahulu dari Docker Hub. Contoh ini mencakup tugas awal yang berjalan di host VM pada node kumpulan. Anda dapat menjalankan tugas mulai di host, misalnya, untuk memasang server file yang dapat diakses dari kontainer.

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;
...

Gambar yang diambil sebelumnya dari registri kontainer privat

Anda juga dapat mengambil gambar kontainer terlebih dahulu dengan mengautentikasi ke server registri kontainer privat. Dalam contoh berikut, objek ContainerConfiguration dan VirtualMachineConfiguration mengambil gambar TensorFlow privat terlebih dahulu dari registri kontainer Azure privat. Referensi gambar sama seperti contoh sebelumnya.

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);
...

Dukungan identitas terkelola untuk ACR

Saat Anda mengakses kontainer yang disimpan di Azure Container Registry, nama pengguna/kata sandi atau identitas terkelola dapat digunakan untuk mengautentikasi dengan layanan. Untuk menggunakan identitas terkelola, pertama-tama pastikan bahwa identitas telah ditugaskan ke kumpulan dan identitas memiliki peran AcrPull yang ditetapkan untuk registri kontainer yang ingin Anda akses. Kemudian, instruksikan Batch dengan identitas mana yang akan digunakan saat mengautentikasi dengan 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);
...

Pengaturan kontainer untuk tugas

Untuk menjalankan tugas kontainer pada kumpulan yang mendukung kontainer, tentukan pengaturan tertentu kontainer. Pengaturan mencakup gambar yang akan digunakan, registri, dan opsi menjalankan kontainer.

  • Gunakan properti ContainerSettings kelas tugas untuk mengonfigurasi pengaturan tertentu kontainer. Pengaturan ini ditentukan oleh kelas TaskContainerSettings. Opsi --rm kontainer tidak memerlukan opsi lain --runtime karena ditangani oleh Batch.

  • Jika Anda menjalankan tugas pada gambar kontainer, tugas cloud dan tugas manajer pekerjaan memerlukan pengaturan kontainer. Namun, tugas mulai, tugas persiapan pekerjaan, dan tugas rilis pekerjaan tidak memerlukan pengaturan kontainer (yaitu, mereka dapat berjalan dalam konteks kontainer atau langsung pada simpul).

  • Untuk Linux, Batch memetakan izin pengguna/grup ke kontainer. Jika akses ke folder mana pun dalam kontainer memerlukan izin Admin, Anda mungkin perlu menjalankan tugas sebagai cakupan kumpulan dengan tingkat elevasi admin. Ini memastikan bahwa Batch menjalankan tugas sebagai root dalam konteks kontainer. Jika tidak, pengguna non-admin mungkin tidak memiliki akses ke folder tersebut.

  • Untuk kumpulan kontainer dengan perangkat keras yang diaktifkan GPU, Batch secara otomatis mengaktifkan GPU untuk tugas kontainer, jadi Anda tidak boleh menyertakan –gpus argumen.

Baris perintah tugas kontainer

Saat Anda menjalankan tugas kontainer, Batch secara otomatis menggunakan perintah docker create untuk membuat kontainer menggunakan gambar yang ditentukan dalam tugas. Batch kemudian mengontrol eksekusi tugas dalam kontainer.

Seperti halnya tugas Batch non-kontainer, Anda mengatur baris perintah untuk tugas kontainer. Karena Batch secara otomatis membuat kontainer, baris perintah hanya menentukan perintah atau perintah yang berjalan dalam kontainer.

Jika gambar kontainer untuk tugas Batch dikonfigurasi dengan skrip ENTRYPOINT, Anda dapat mengatur baris perintah untuk menggunakan ENTRYPOINT default atau menimpanya:

  • Untuk menggunakan ENTRYPOINT default dari gambar kontainer, atur baris perintah tugas ke string kosong "".

  • Untuk mengambil alih ENTRYPOINT default, tambahkan --entrypoint argumen misalnya: --entrypoint "/bin/sh - python"

  • Jika gambar tidak memiliki ENTRYPOINT, atur baris perintah yang sesuai untuk kontainer, misalnya, /app/myapp atau /bin/sh -c python myscript.py

ContainerRunOptions opsional adalah argumen lain yang Anda berikan ke docker create perintah yang digunakan Batch untuk membuat dan menjalankan kontainer. Misalnya, untuk mengatur direktori kerja untuk kontainer, atur opsi --workdir <directory>. Lihat referensi pembuatan docker untuk opsi lainnya.

Direktori kerja tugas kontainer

Tugas kontainer Batch dijalankan dalam direktori kerja dalam kontainer yang mirip dengan direktori yang disiapkan Batch untuk tugas reguler (non-kontainer). Direktori kerja ini berbeda dari WORKDIR jika dikonfigurasi dalam gambar, atau direktori kerja kontainer default (C:\ pada kontainer Windows, atau / pada kontainer Linux).

Untuk tugas kontainer Batch:

  • Semua direktori secara rekursif di bawah AZ_BATCH_NODE_ROOT_DIR node host (akar direktori Azure Batch) dipetakan ke dalam kontainer.
  • Semua variabel lingkungan tugas dipetakan ke dalam kontainer.
  • Direktori kerja tugas AZ_BATCH_TASK_WORKING_DIR pada node diatur sama seperti untuk tugas reguler dan dipetakan ke dalam kontainer.

Penting

Untuk kumpulan kontainer Windows pada keluarga VM dengan disk ephemeral, seluruh disk ephemeral dipetakan ke ruang kontainer karena keterbatasan kontainer Windows.

Pemetaan ini memungkinkan Anda bekerja dengan tugas kontainer dengan cara yang sama seperti tugas non-kontainer. Misalnya, instal aplikasi menggunakan paket aplikasi, akses file sumber daya dari Azure Storage, gunakan pengaturan lingkungan tugas, dan pertahankan file output tugas setelah kontainer berhenti.

Memecahkan masalah tugas kontainer

Jika tugas kontainer Anda tidak berjalan seperti yang diharapkan, Anda mungkin perlu mendapatkan informasi tentang konfigurasi WORKDIR atau ENTRYPOINT dari gambar kontainer. Untuk melihat konfigurasi, jalankan perintah inspeksi gambar docker.

Jika diperlukan, sesuaikan pengaturan tugas kontainer berdasarkan gambar:

  • Tentukan jalur absolut di baris perintah tugas. Jika ENTRYPOINT default gambar digunakan untuk baris perintah tugas, pastikan bahwa jalur absolut diatur.
  • Dalam opsi menjalankan kontainer tugas, ubah direktori kerja agar sesuai dengan WORKDIR dalam gambar. Misalnya, atur --workdir /app.

Contoh tugas kontainer

Cuplikan Python berikut menunjukkan baris perintah dasar yang berjalan di kontainer yang dibuat dari gambar fiktif yang ditarik dari Docker Hub. Di sini, opsi kontainer --rm menghapus kontainer setelah tugas selesai dan opsi --workdir mengatur direktori kerja. Baris perintah menimpa ENTRYPOINT kontainer dengan perintah shell sederhana yang menulis file kecil ke direktori kerja tugas pada host.

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
)

Contoh C# berikut menunjukkan pengaturan kontainer dasar untuk tugas cloud:

// 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;

Langkah berikutnya