Kapsayıcı iş yüklerini çalıştırmak için Azure Batch kullanma

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı ve buna uygun planlamayı göz önünde bulundurun. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

Azure Batch, Azure'da çok sayıda toplu işlem işini çalıştırmanıza ve ölçeklendirmenize olanak tanır. Batch görevleri bir Batch havuzundaki sanal makinelerde (düğümler) doğrudan çalıştırılabilir, ancak düğümlerdeki Docker uyumlu kapsayıcılarda görevleri çalıştırmak için bir Batch havuzu da ayarlayabilirsiniz. Bu makalede, kapsayıcı görevlerini çalıştırmayı destekleyen bir işlem düğümleri havuzu oluşturma ve ardından havuzda kapsayıcı görevlerini çalıştırma işlemleri açıklanmıştır.

Buradaki kod örneklerinde Batch .NET ve Python SDK'ları kullanılır. Kapsayıcı özellikli Batch havuzları oluşturmak ve kapsayıcı görevlerini çalıştırmak için Azure portalı da dahil olmak üzere diğer Batch SDK'larını ve araçlarını da kullanabilirsiniz.

Kapsayıcılar neden kullanılır?

Kapsayıcılar, uygulamaları çalıştırmak için ortamı ve bağımlılıkları yönetmek zorunda kalmadan Batch görevlerini çalıştırmak için kolay bir yol sağlar. Kapsayıcılar, uygulamaları birkaç farklı ortamda çalıştırabilen basit, taşınabilir, kendi kendine yeterli birimler olarak dağıtır. Örneğin, bir kapsayıcıyı yerel olarak derleyip test edin, ardından kapsayıcı görüntüsünü Azure'daki veya başka bir yerdeki bir kayıt defterine yükleyin. Kapsayıcı dağıtım modeli, uygulamanızın çalışma zamanı ortamının uygulamayı barındırdığınız her yerde her zaman doğru şekilde yüklenmesini ve yapılandırılmasını sağlar. Batch'teki kapsayıcı tabanlı görevler, uygulama paketleri ve kaynak dosyalarının ve çıkış dosyalarının yönetimi de dahil olmak üzere kapsayıcı olmayan görevlerin özelliklerinden de yararlanabilir.

Önkoşullar

Kapsayıcı kavramları ve Batch havuzu ve işi oluşturma hakkında bilgi sahibi olmanız gerekir.

  • SDK sürümleri: Batch SDK'ları aşağıdaki sürümlerden itibaren kapsayıcı görüntülerini destekler:

    • Batch REST API sürüm 2017-09-01.6.0
    • Batch .NET SDK sürüm 8.0.0
    • Batch Python SDK sürüm 4.0
    • Batch Java SDK sürüm 3.0
    • Batch Node.js SDK sürüm 3.0
  • Hesaplar: Azure aboneliğinizde bir Batch hesabı ve isteğe bağlı olarak bir Azure Depolama hesabı oluşturmanız gerekir.

  • Desteklenen bir sanal makine (VM) görüntüsü: Kapsayıcılar, desteklenen bir görüntüden (sonraki bölümde listelenmiştir) yalnızca Sanal Makine Yapılandırması ile oluşturulan havuzlarda desteklenir. Özel görüntü sağlarsanız, aşağıdaki bölümdeki önemli noktalara ve Özel görüntü havuzu oluşturmak için yönetilen görüntü kullanma bölümündeki gereksinimlere bakın.

Not

Batch SDK sürümlerinden:

  • Batch .NET SDK sürüm 16.0.0
  • Batch Python SDK sürüm 14.0.0
  • Batch Java SDK sürüm 11.0.0
  • Batch Node.js SDK sürüm 11.0.0

Şu anda özelliğinin containerConfiguration geçirilmesini gerektirir Type ve desteklenen değerler şunlardır: ContainerType.DockerCompatible ve ContainerType.CriCompatible.

Aşağıdaki sınırlamaları göz önünde bulundurun:

  • Batch yalnızca Linux havuzlarında çalışan kapsayıcılar için uzaktan doğrudan bellek erişimi (RDMA) desteği sağlar.
  • Windows kapsayıcı iş yükleri için havuzunuz için çok çekirdekli bir VM boyutu seçmelisiniz.

Önemli

Docker, varsayılan olarak alt ağ belirtimine 172.17.0.0/16sahip bir ağ köprüsü oluşturur. Havuzunuz için bir sanal ağ belirtiyorsanız, lütfen çakışan IP aralıkları olmadığından emin olun.

Desteklenen VM görüntüleri

Kapsayıcı iş yükleri için vm işlem düğümleri havuzu oluşturmak için aşağıdaki desteklenen Windows veya Linux görüntülerinden birini kullanın. Batch ile uyumlu Market görüntüleri hakkında daha fazla bilgi için bkz . Sanal makine görüntülerinin listesi.

Windows desteği

Batch, kapsayıcı desteği atamalarına sahip Windows sunucu görüntülerini destekler. Batch'te desteklenen tüm görüntüleri listelemek için API, görüntü Docker kapsayıcılarını destekliyorsa bir DockerCompatible özelliği belirtir. Batch, Mirantis tarafından yayımlanan ve özelliği olarak DockerCompatiblebelirtilen görüntülere izin verir, ancak doğrudan desteklemez. Bu görüntüler yalnızca Kullanıcı Aboneliği havuzu ayırma modu Batch hesabı altında dağıtılabilir.

Ayrıca, Windows'ta kapsayıcı işlevselliğini etkinleştirmek için özel bir görüntü de oluşturabilirsiniz.

Not

Görüntü SKU'ları -with-containers veya -with-containers-smalldisk kullanımdan kaldırıldı. Ayrıntılar ve alternatif kapsayıcı çalışma zamanı seçenekleri için lütfen duyuruya bakın.

Linux desteği

Linux kapsayıcı iş yükleri için Batch şu anda özel görüntüye gerek kalmadan Azure Market yayımlanan aşağıdaki Linux görüntülerini destekler.

  • Yayımcı: microsoft-dsvm
    • Teklif: ubuntu-hpc

Alternatif görüntü seçenekleri

Şu anda kapsayıcı iş yüklerini destekleyen başka görüntüler de microsoft-azure-batch yayımlanmıştır:

  • Yayımcı: microsoft-azure-batch
    • Teklif: centos-container
    • Teklif: centos-container-rdma (Infiniband ile yalnızca VM SKU'larında kullanım için)
    • Teklif: ubuntu-server-container
    • Teklif: ubuntu-server-container-rdma (Infiniband ile yalnızca VM SKU'larında kullanım için)

Önemli

tarafından microsoft-azure-batchyayımlanan görüntüler yerine VM görüntüsünün kullanılması microsoft-dsvmubuntu-hpc önerilir. Bu görüntü herhangi bir VM SKU'su üzerinde kullanılabilir.

Notlar

Yukarıdaki görüntülerin docker veri kökü farklı yerlerdedir:

  • Azure Batch tarafından yayımlanan microsoft-azure-batch görüntüler (Teklif: centos-container-rdmavb.) için docker veri kökü geçici diskte bulunan /mnt/batch/docker ile eşlenir.
  • HPC görüntüsü veya microsoft-dsvm (Teklif: ubuntu-hpcvb.) için docker veri kökü, Linux'ta /var/lib/docker ve Windows üzerinde C:\ProgramData\Docker olan Docker varsayılanı ile değiştirilmez. Bu klasörler işletim sistemi diskinde bulunur.

Batch tarafından yayımlanmayan görüntülerde, kapsayıcı görüntüleri indirilirken işletim sistemi diskinin hızla doldurulma riski vardır.

Müşteriler için olası çözümler

BatchExplorer'da havuz oluştururken başlangıç görevinde docker veri kökünü değiştirin. Aşağıda, Görevi Başlat komutunun bir örneği verilmiştir:

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

Bu görüntüler yalnızca Azure Batch havuzlarında kullanılmak üzere desteklenir ve Docker kapsayıcısı yürütme için hazırlanır. Bu özellikler:

  • Önceden yüklenmiş bir Docker uyumlu Moby kapsayıcı çalışma zamanı.
  • Azure N serisi VM'lerde dağıtımı kolaylaştırmak için önceden yüklenmiş NVIDIA GPU sürücüleri ve NVIDIA kapsayıcı çalışma zamanı.
  • son ekine -rdma sahip VM görüntüleri InfiniBand RDMA VM boyutları desteğiyle önceden yapılandırılır. Bu VM görüntüleri InfiniBand desteği olmayan VM boyutlarıyla kullanılmamalıdır.

Batch ile uyumlu Linux dağıtımlarından birinde Batch kapsayıcıları için uyumlu özel görüntüler de oluşturabilirsiniz. Özel görüntüde Docker desteği için Docker veya Mirantis Container Runtime sürümü gibi uygun bir Docker uyumlu çalışma zamanı yükleyin. Yalnızca Docker-CLI uyumlu bir araç yüklemek yetersizdir; Docker Altyapısı uyumlu bir çalışma zamanı gereklidir.

Önemli

Ne Microsoft ne de Azure Batch Docker (herhangi bir sürüm veya sürüm), Mirantis Container Runtime veya Moby çalışma zamanlarıyla ilgili sorunlar için destek sağlamaz. Bu çalışma zamanlarını görüntülerinde kullanmayı seçen müşteriler, çalışma zamanı sorunları için destek sağlayan şirkete veya varlığa ulaşmalıdır.

Özel Linux görüntüsü kullanma konusunda dikkat edilmesi gereken diğer noktalar:

  • Özel görüntü kullanırken Azure N serisi boyutlarının GPU performansından yararlanmak için NVIDIA sürücülerini önceden yükleyin. Ayrıca, NVIDIA GPU'ları için Docker Engine Yardımcı Programı olan NVIDIA Docker'ı yüklemeniz gerekir.
  • Azure RDMA ağına erişmek için RDMA özellikli bir VM boyutu kullanın. Batch tarafından desteklenen CentOS HPC ve Ubuntu görüntülerine gerekli RDMA sürücüleri yüklenir. MPI iş yüklerini çalıştırmak için ek yapılandırma gerekebilir. Bkz . Batch havuzunda RDMA veya GPU örneklerini kullanma.

Batch havuzu için kapsayıcı yapılandırması

Bir Batch havuzunun kapsayıcı iş yüklerini çalıştırmasını sağlamak için havuzun VirtualMachineConfiguration nesnesinde ContainerConfiguration ayarlarını belirtmeniz gerekir. Bu makalede Batch .NET API başvurusunun bağlantıları sağlanır. İlgili ayarlar Batch Python API'sindedir.

Aşağıdaki örneklerde gösterildiği gibi önceden oluşturulmuş kapsayıcı görüntüleriyle veya olmadan kapsayıcı özellikli bir havuz oluşturabilirsiniz. Çekme (veya önceden yükleme) işlemi, Docker Hub'dan veya İnternet'te başka bir kapsayıcı kayıt defterinden kapsayıcı görüntülerini önceden yüklemenizi sağlar. En iyi performans için Batch hesabıyla aynı bölgede bir Azure kapsayıcı kayıt defteri kullanın.

Kapsayıcı görüntülerini önceden oluşturmanın avantajı, görevler ilk kez çalışmaya başladığında kapsayıcı görüntüsünün indirilmesini beklemeleri gerekmeyecek olmasıdır. Kapsayıcı yapılandırması, havuz oluşturulduğunda kapsayıcı görüntülerini VM'lere çeker. Havuzda çalışan görevler daha sonra kapsayıcı görüntüleri ve kapsayıcı çalıştırma seçenekleri listesine başvurabilir.

Önceden oluşturulmuş kapsayıcı görüntüleri olmayan havuz

Kapsayıcılı havuzu önceden oluşturulmuş kapsayıcı görüntüleri olmadan yapılandırmak için aşağıdaki örneklerde gösterildiği gibi ve VirtualMachineConfiguration nesnelerini tanımlayınContainerConfiguration. Bu örneklerde Market'ten Azure Batch kapsayıcı havuzları için Ubuntu Sunucusu görüntüsü kullanılır.

Not: Örnekte kullanılan Ubuntu sunucu sürümü, çizim amaçlıdır. node_agent_sku_id kullandığınız sürümle değiştirebilirsiniz.

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

Kapsayıcı yapılandırması için görüntüleri önceden ekleme

Havuzdaki kapsayıcı görüntülerini önceden eklemek için kapsayıcı görüntülerinin listesini (container_image_names Python'da) öğesine ContainerConfigurationekleyin.

Aşağıdaki temel Python örneğinde, Docker Hub'dan standart bir Ubuntu kapsayıcı görüntüsünün nasıl önceden derlenmiş olduğu gösterilmektedir.

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

Aşağıdaki C# örneği, Docker Hub'dan bir TensorFlow görüntüsünü önceden eklemek istediğinizi varsayar. Bu örnek, havuz düğümlerindeki VM ana bilgisayarında çalışan bir başlangıç görevi içerir. Örneğin kapsayıcılardan erişilebilen bir dosya sunucusunu bağlamak için konakta bir başlangıç görevi çalıştırabilirsiniz.

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

Özel kapsayıcı kayıt defterinden görüntüleri önceden ekleme

Ayrıca, özel bir kapsayıcı kayıt defteri sunucusunda kimlik doğrulaması yaparak kapsayıcı görüntülerini önceden de oluşturabilirsiniz. Aşağıdaki örneklerde ve VirtualMachineConfiguration nesneleri, ContainerConfiguration özel bir Azure kapsayıcı kayıt defterinden özel bir TensorFlow görüntüsünden öncesini oluşturur. Görüntü başvurusu, önceki örnektekiyle aynıdır.

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

ACR için yönetilen kimlik desteği

Azure Container Registry'de depolanan kapsayıcılara eriştiğinizde, hizmette kimlik doğrulaması yapmak için kullanıcı adı/parola veya yönetilen kimlik kullanılabilir. Yönetilen kimlik kullanmak için önce kimliğin havuza atandığından ve kimliğin erişmek istediğiniz kapsayıcı kayıt defteri için atanmış role sahip AcrPull olduğundan emin olun. Ardından Batch'e ACR ile kimlik doğrulaması yaparken hangi kimliğin kullanılacağını belirtin.

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

Görev için kapsayıcı ayarları

Kapsayıcı etkinleştirilmiş bir havuzda kapsayıcı görevi çalıştırmak için kapsayıcıya özgü ayarları belirtin. Ayarlar kullanılacak görüntüyü, kayıt defteri ve kapsayıcı çalıştırma seçeneklerini içerir.

  • Kapsayıcıya ContainerSettings özgü ayarları yapılandırmak için görev sınıflarının özelliğini kullanın. Bu ayarlar TaskContainer Ayarlar sınıfı tarafından tanımlanır. --rm Batch tarafından halledildiği için kapsayıcı seçeneği başka bir --runtime seçenek gerektirmez.

  • Görevleri kapsayıcı görüntülerinde çalıştırırsanız, bulut görevi ve iş yöneticisi görevi kapsayıcı ayarları gerektirir. Ancak, başlangıç görevi, iş hazırlama görevi ve iş bırakma görevi kapsayıcı ayarları gerektirmez (başka bir ifadeyle, kapsayıcı bağlamında veya doğrudan düğümde çalıştırılabilir).

  • Linux için Batch, kullanıcı/grup iznini kapsayıcıyla eşler. Kapsayıcı içindeki herhangi bir klasöre erişim Yönetici istrator izni gerektiriyorsa, görevi yönetici yükseltme düzeyine sahip havuz kapsamı olarak çalıştırmanız gerekebilir. Bu, Batch'in görevi kapsayıcı bağlamında kök olarak çalıştırmasını sağlar. Aksi takdirde, yönetici olmayan bir kullanıcının bu klasörlere erişimi olmayabilir.

  • GPU özellikli donanıma sahip kapsayıcı havuzları için Batch, kapsayıcı görevleri için GPU'nun otomatik olarak etkinleştirilmesini –gpus sağlar, bu nedenle bağımsız değişkeni dahil etmemeniz gerekir.

Kapsayıcı görevi komut satırı

Bir kapsayıcı görevi çalıştırdığınızda Batch, görevde belirtilen görüntüyü kullanarak kapsayıcı oluşturmak için otomatik olarak docker create komutunu kullanır. Batch daha sonra kapsayıcıda görev yürütmeyi denetler.

Kapsayıcı olmayan Batch görevlerde olduğu gibi, kapsayıcı görevi için bir komut satırı ayarlarsınız. Batch kapsayıcıyı otomatik olarak oluşturduğundan, komut satırı yalnızca kapsayıcıda çalışan komutu veya komutları belirtir.

Batch görevinin kapsayıcı görüntüsü entrypoint betiğiyle yapılandırılmışsa, komut satırınızı varsayılan ENTRYPOINT'i kullanacak veya geçersiz kılabilir:

  • Kapsayıcı görüntüsünün varsayılan ENTRYPOINT değerini kullanmak için görev komut satırını boş dize ""olarak ayarlayın.

  • Varsayılan ENTRYPOINT'i geçersiz kılmak için bağımsız değişkenini --entrypoint ekleyin, örneğin: --entrypoint "/bin/sh - python"

  • Görüntüde ENTRYPOINT yoksa, kapsayıcı için uygun bir komut satırı ayarlayın, örneğin, /app/myapp veya /bin/sh -c python myscript.py

İsteğe bağlı ContainerRunOptions , Batch'in kapsayıcıyı oluşturmak ve çalıştırmak için docker create kullandığı komuta sağladığınız diğer bağımsız değişkenlerdir. Örneğin, kapsayıcı için bir çalışma dizini ayarlamak için seçeneğini ayarlayın --workdir <directory> . Daha fazla seçenek için docker oluşturma başvurusuna bakın.

Kapsayıcı görevi çalışma dizini

Batch kapsayıcı görevi, Batch'in normal (kapsayıcı olmayan) bir görev için ayarlamış olduğu dizine benzer bir kapsayıcıdaki çalışma dizininde yürütülür. Bu çalışma dizini, görüntüde veya varsayılan kapsayıcı çalışma dizininde (C:\Windows kapsayıcısında veya / Linux kapsayıcısında) yapılandırıldıysa WORKDIR'den farklıdır.

Batch kapsayıcı görevi için:

  • Konak düğümünde AZ_BATCH_NODE_ROOT_DIR (Azure Batch dizinlerinin kökü) altındaki tüm dizinler özyinelemeli olarak kapsayıcıyla eşlenir.
  • Tüm görev ortamı değişkenleri kapsayıcıya eşlenir.
  • Düğümdeki görev çalışma dizini AZ_BATCH_TASK_WORKING_DIR , normal bir görevle aynı şekilde ayarlanır ve kapsayıcıya eşlenir.

Önemli

Kısa ömürlü diskleri olan VM ailelerindeki Windows kapsayıcı havuzları için kısa ömürlü diskin tamamı, Windows kapsayıcı sınırlamaları nedeniyle kapsayıcı alanına eşlenir.

Bu eşlemeler, kapsayıcı görevleriyle kapsayıcı dışı görevlerle aynı şekilde çalışmanıza olanak sağlar. Örneğin, uygulama paketlerini kullanarak uygulamaları yükleyin, Azure Depolama kaynak dosyalarına erişin, görev ortamı ayarlarını kullanın ve kapsayıcı durduktan sonra görev çıktı dosyalarını kalıcı hale alın.

Kapsayıcı görevleriyle ilgili sorunları giderme

Kapsayıcı göreviniz beklendiği gibi çalışmıyorsa, kapsayıcı görüntüsünün WORKDIR veya ENTRYPOINT yapılandırması hakkında bilgi almanız gerekebilir. Yapılandırmayı görmek için docker image inspect komutunu çalıştırın.

Gerekirse, kapsayıcı görevinin ayarlarını görüntüye göre ayarlayın:

  • Görev komut satırında mutlak bir yol belirtin. Görev komut satırı için görüntünün varsayılan ENTRYPOINT değeri kullanılıyorsa, mutlak bir yol ayarlandığından emin olun.
  • Görevin kapsayıcı çalıştırma seçeneklerinde, çalışma dizinini görüntüdeki WORKDIR ile eşleşecek şekilde değiştirin. Örneğin, ayarlayın --workdir /app.

Kapsayıcı görevi örnekleri

Aşağıdaki Python kod parçacığı, Docker Hub'dan çekilen kurgusal bir görüntüden oluşturulan bir kapsayıcıda çalışan temel bir komut satırını gösterir. Burada, --rm görev tamamlandıktan sonra kapsayıcı seçeneği kapsayıcıyı kaldırır ve --workdir seçeneği bir çalışma dizini ayarlar. Komut satırı, kapsayıcı ENTRYPOINT'ini konak üzerindeki görev çalışma dizinine küçük bir dosya yazan basit bir kabuk komutuyla geçersiz kılar.

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
)

Aşağıdaki C# örneği, bir bulut görevi için temel kapsayıcı ayarlarını gösterir:

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

Sonraki adımlar

  • Linux'ta Docker CE yükleme ve kullanma hakkında bilgi için Docker belgelerine bakın.
  • Özel görüntü havuzu oluşturmak için yönetilen görüntü kullanmayı öğrenin.
  • Kapsayıcı tabanlı sistemler oluşturmaya yönelik bir çerçeve olan Moby projesi hakkında daha fazla bilgi edinin.