Docker Compose uygulamalarını Azure App Service'te sepetlere geçirme

Azure App Service'te docker Compose uygulaması çalıştırıyorsanız bunu sepetlere geçirmeniz gerekir. Docker Compose uygulamasını sidecarlara taşımak için iki ana strateji vardır.

  • Betik tabanlı geçiş - basit kurulumlar için önerilir.
  • El ile geçiş

Önkoşullar

  • PowerShell
  • Azure Komut Satırı Arayüzü (Azure CLI)
  • Docker (görüntü oluşturmak ve göndermek için)

Betik ile geçiş

Docker Compose dosyanız basitse, işlemi otomatikleştirmek için resmi geçiş betiğini kullanabilirsiniz.

Önemli

Geçiş betiğini çalıştırmadan önce uygulamanızı her zaman Azure portalından yedekleyin.

  1. Azure Örnekleri GitHub deposundan geçiş betiğini indirin.

  2. Betiği PowerShell'de çalıştırarak abonelik kimliğinizi, web uygulamasının adını, kaynak grubunu, kayıt defteri URL'sini, base64 kodlamalı Docker Compose dosyasını, ana hizmet adını ve hedef bağlantı noktasını sağlayın.

    ./update-webapp.ps1 `
      -subscriptionId "<subscriptionId>" `
      -webAppName "<webAppName>" `
      -resourceGroup "<resourceGroup>" `
      -registryUrl "<registryUrl>" `
      -base64DockerCompose "<base64DockerCompose>" `
      -mainServiceName "<mainServiceName>" `
      -targetPort "<targetPort>"
    

    Kayıt defteriniz kimlik doğrulaması gerektiriyorsa, betik sizden dockerRegistryServerUsername ve dockerRegistryServerPassword bilgilerini etkileşimli olarak sağlamanızı ister.

El ile geçiş yapma

  1. Azure'da oturum açın ve aboneliğinizi ayarlayın.

    az login
    az account set --subscription <your-subscription-id>
    
  2. Gerekli ayrıntıları toplayın.

    az account show --query id --output tsv
    az webapp list --query "[].{name:name}" --output tsv
    az group list --query "[].{name:name}" --output tsv
    az acr list --query "[].{name:name}" --output tsv
    

    Bunlar abonelik kimliğinizi, uygulama adınızı, kaynak grubunuzu ve Azure kapsayıcı kayıt defterinizi belirlemenize yardımcı olur.

  3. Dağıtım yuvası oluşturun. Yuvayı üretim ortamına geçirmeden önce taşınan sidecar'ları doğrulayacaksınız.

    az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  4. Üretim uygulamasından mevcut Docker Compose yapılandırmasını çözebilirsiniz.

    az webapp config show --name <webapp-name> --resource-group <resource-group> --query linuxFxVersion
    

    Çıkıştan base64 bölümünü kopyalayın ve PowerShell'de kodunu açın:

    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))
    
  5. Oluştur dosyanızdaki her hizmet için, URL yolunun altındaki sitecontainers dağıtım yuvasında karşılık gelen container bir kaynak oluşturun:

    az rest --method PUT \
      --url https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<webapp-name>/slots/<slot-name>/sitecontainers/<container-name>?api-version=2023-12-01 \
      --body '{"name":"<container-name>", "properties":{"image":"<image-name>", "isMain": <true/false>, "targetPort": <port>}}'
    
    • Eşleme konusunda size yardımcı olması için Docker Compose Öznitelikleri ve Sepet Yapılandırması Eşlemesi'ni kullanın.

    • içinde <container-name>olmasını istediğiniz kapsayıcı adını kullanın.

    • isMain Değerini ana uygulama kapsayıcısı için true, yan arabalar için false olarak ayarlayın.

    • <image-name> için sunucu adını içeren görüntünün tam yolunu kullanın. Örneğin:

      "image":"myregistry.azurecr.io/myapp/backend:latest"
      
    • Tüm kapsayıcılar için tekrarlayın.

  6. Sidecar modunu kullanmak için dağıtım yuvasını değiştirin.

    az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"
    
  7. Dağıtım yuvasını yeniden başlatın, ardından geçirilen uygulamanın dağıtım yuvasındaki işlevselliğini doğrulayın.

    az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  8. Doğrulandıktan sonra yuvayı üretime geçirin:

    az webapp deployment slot swap --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --target-slot production
    

Docker Compose özniteliklerini ve sidecar yapılandırmasını eşleme

Aşağıdaki Docker Compose alanları sidecar yapılandırmasıyla eşlenir:

Docker Compose Sidecar yapılandırması Notes
command, entrypoint startUpCommand
environment environmentVariables
image image
ports targetPort Dış trafik için yalnızca 80 ve 8080 bağlantı noktaları desteklenir.
volumes volumeMounts Kalıcı Azure depolama desteklenmiyor.

Sidecar konteynerlerde aşağıdaki Docker Compose alanları desteklenmez:

Docker Compose Ortamı Destek Notes
build İzin verilmiyor Görüntüleri önceden derleyin ve bir kayıt defterine gönderin.
depends_on Yoksayıldı Kapsayıcı başlatma siparişi garanti değildir.
networks Yoksayıldı Ağ iç işlemlerle yönetilir.
secrets Yoksayıldı Gizli bilgiler için App Service uygulama ayarlarını veya Key Vault'ı kullanın.
volumes kullanarak {WEBAPP_STORAGE_HOME} veya {WEBSITES_ENABLE_APP_SERVICE_STORAGE} Desteklenmiyor

Geçiş sınırlamaları ve dikkat edilmesi gerekenler

Aşağıdaki tabloda, Docker Compose uygulamalarında desteklenen ancak sidecar'larda desteklenmeyen veya sınırlı desteklenen özellikler gösterilmektedir.

Özellik Docker Compose Sepet
Depolama Kapsayıcılar arasında paylaşılan birimler Kapsayıcıya özel kalıcı depolama sınırlıdır
Ağ Kurma Konak adı olarak hizmet adları Tüm kapsayıcılar localhost öğesini paylaşır; benzersiz bağlantı noktaları gereklidir.
Kayıt Tutma ve İzleme Özelleştirilmiş sürücüler, harici araçlar Azure Monitor ve Log Analytics ile tümleşik
App Service Ortamı (ASE) Destekleniyor Henüz desteklenmiyor
Ulusal Bulutlar Destekleniyor Henüz desteklenmiyor

Daha fazla kaynak