Partager via


Migrer des applications Docker Compose vers des sidecars dans Azure App Service

Si vous exécutez une application Docker Compose dans Azure App Service, vous devez la migrer vers des sidecars. Il existe deux stratégies principales pour migrer une application Docker Compose vers des sidecars.

  • Migration basée sur des scripts : recommandée pour les configurations simples.
  • Migration manuelle

Conditions préalables

  • PowerShell
  • Azure CLI (Interface de ligne de commande Azure)
  • Docker (pour la génération et l’envoi d’images)

Migrer avec un script

Si votre fichier Docker Compose est simple, vous pouvez utiliser le script de migration officiel pour automatiser le processus.

Important

Sauvegardez toujours votre application à partir du portail Azure avant d’exécuter le script de migration.

  1. Téléchargez le script de migration à partir du dépôt GitHub d’exemples Azure.

  2. Exécutez le script dans PowerShell, en fournissant votre ID d’abonnement, le nom de l’application web, le groupe de ressources, l’URL du Registre, le fichier Docker Compose codé en base64, le nom du service principal et le port cible.

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

    Si votre registre nécessite une authentification, le script vous invite à fournir dockerRegistryServerUsername et dockerRegistryServerPassword de manière interactive.

Migrer manuellement

  1. Connectez-vous à Azure et définissez votre abonnement.

    az login
    az account set --subscription <your-subscription-id>
    
  2. Rassemblez les détails requis.

    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
    

    Celles-ci vous aideront à identifier votre ID d’abonnement, le nom de l’application, le groupe de ressources et le registre de conteneurs Azure.

  3. Créez un emplacement de déploiement. Vous allez valider les sidecars migrés avant de basculer l’emplacement en production.

    az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  4. Décodez la configuration Docker Compose existante à partir de l’application de production.

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

    Copiez la partie base64 à partir de la sortie et décodez-la dans PowerShell :

    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))
    
  5. Pour chaque service de votre fichier Compose, créez une ressource correspondante container dans l’emplacement de déploiement sous le chemin d’URL sitecontainers :

    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>}}'
    
    • Utilisez le mappage des attributs Docker Compose et de la configuration sidecar pour vous aider à effectuer le mappage.

    • Utilisez un nom de conteneur souhaité dans <container-name>.

    • Défini isMain sur true pour le conteneur d’application principal, false pour les sidecars.

    • Pour <image-name>, utilisez le chemin d’accès complet de l’image qui inclut le nom du serveur. Par exemple:

      "image":"myregistry.azurecr.io/myapp/backend:latest"
      
    • Répétez pour tous les conteneurs.

  6. Basculez l’emplacement de déploiement pour utiliser le mode conteneur auxiliaire.

    az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"
    
  7. Redémarrez l’emplacement de déploiement, puis validez les fonctionnalités de l’application migrée dans l’emplacement de déploiement.

    az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  8. Une fois validé, échangez l’emplacement en production :

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

Mappage des attributs de Docker Compose et de la configuration du conteneur auxiliaire

Les champs Docker Compose suivants sont mappés à la configuration sidecar :

Docker Compose Configuration Sidecar Remarques
command, entrypoint startUpCommand
environment environmentVariables
image image
ports targetPort Seuls les ports 80 et 8080 sont pris en charge pour le trafic externe.
volumes volumeMounts Stockage Azure persistant non pris en charge.

Les champs Docker Compose suivants ne sont pas pris en charge dans les sidecars :

Champ Docker Compose Soutien Remarques
build Non autorisé Pré-génération et envoi (push) d’images vers un registre.
depends_on Ignoré Aucun ordre de démarrage de conteneur n’est garanti.
networks Ignoré La mise en réseau est gérée en interne.
secrets Ignoré Utilisez les paramètres d’application App Service ou Key Vault pour les secrets.
volumes par {WEBAPP_STORAGE_HOME} ou {WEBSITES_ENABLE_APP_SERVICE_STORAGE} Non prise en charge

Limitations et considérations relatives à la migration

Le tableau suivant présente les fonctionnalités actuellement prises en charge dans les applications Docker Compose qui ne sont pas prises en charge ou qui ont une prise en charge limitée dans les side-cars.

Caractéristique Docker Compose Sidecar
Stockage Volumes partagés entre conteneurs Stockage persistant spécifique au conteneur limité
Réseautage Noms de service en tant que noms d’hôte Tous les conteneurs partagent localhost; ports uniques requis
Journalisation et surveillance Pilotes personnalisés, outils externes Intégré à Azure Monitor et Log Analytics
App Service Environment (ASE) Soutenu Pas encore pris en charge
Clouds nationaux Soutenu Pas encore pris en charge

Plus de ressources