Compartir a través de


Migración de aplicaciones de Docker Compose a contenedores sidecar en Azure App Service

Si ejecuta una aplicación de Docker Compose en Azure App Service, debe migrarla a contenedores sidecar. Hay dos estrategias principales para migrar una aplicación de Docker Compose a contenedores sidecar.

  • Migración basada en scripts: se recomienda para configuraciones sencillas.
  • Migración manual

Prerrequisitos

  • PowerShell
  • CLI de Azure
  • Docker (para compilar e insertar imágenes)

Migración con un script

Si el archivo de Docker Compose es sencillo, puede usar el script de migración oficial para automatizar el proceso.

Importante

Realice siempre una copia de seguridad de la aplicación desde Azure Portal antes de ejecutar el script de migración.

  1. Descargue el script de migración desde el repositorio de GitHub de ejemplos de Azure.

  2. Ejecute el script en PowerShell, proporcionando el identificador de suscripción, el nombre de la aplicación web, el grupo de recursos, la dirección URL del Registro, el archivo Docker Compose codificado en base64, el nombre del servicio principal y el puerto de destino.

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

    Si el registro requiere autenticación, el script le pedirá que proporcione dockerRegistryServerUsername e dockerRegistryServerPassword interactivamente.

Migración manual

  1. Inicie sesión en Azure y configure la suscripción.

    az login
    az account set --subscription <your-subscription-id>
    
  2. Recopile los detalles necesarios.

    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
    

    Esto le ayudará a identificar el identificador de suscripción, el nombre de la aplicación, el grupo de recursos y el registro de contenedor de Azure.

  3. Crea una ranura de implementación. Tiene que validar los contenedores sidecar migrados antes de cambiar la ranura a producción.

    az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  4. Descodifique la configuración existente de Docker Compose desde la aplicación de producción.

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

    Copie la parte base64 de la salida y descodídela en PowerShell:

    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))
    
  5. Para cada servicio del archivo Compose, cree un recurso container correspondiente en la ranura de implementación en la ruta de acceso de la dirección 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>}}'
    
    • Utilice la asignación de atributos de Docker Compose y la configuración de contenedores sidecar para ayudarle con la asignación.

    • Use un nombre de contenedor que desee en <container-name>.

    • Establezca isMain en true para el contenedor de la aplicación principal y en false para los contenedores sidecar.

    • Para <image-name>, utilice la ruta de acceso completa para la imagen que incluye el nombre del servidor. Por ejemplo:

      "image":"myregistry.azurecr.io/myapp/backend:latest"
      
    • Repita la operación para todos los contenedores.

  6. Cambie la ranura de implementación para usar el modo sidecar.

    az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"
    
  7. Reinicie la ranura de implementación y, a continuación, valide la funcionalidad de la aplicación migrada en la ranura de implementación.

    az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  8. Una vez validado, cambie el slot al entorno de producción.

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

Asignación de atributos de Docker Compose y configuración de contenedores sidecar

Los siguientes campos de Docker Compose se asignan a la configuración de contenedores sidecar:

Docker Compose Configuración de contenedores sidecar Notas
command, entrypoint startUpCommand
environment environmentVariables
image image
ports targetPort Solo se admiten los puertos 80 y 8080 para el tráfico externo.
volumes volumeMounts No se admite el almacenamiento persistente de Azure.

Los siguientes campos de Docker Compose no se admiten en contenedores sidecar:

Campo de Docker Compose Apoyo Notas
build No permitida Compile e inserte imágenes previamente en un registro.
depends_on Omitido No se garantiza ningún pedido de inicio del contenedor.
networks Omitido Las redes se controlan internamente.
secrets Omitido Utiliza la configuración de la aplicación de App Service o Key Vault para gestionar secretos.
volumes usar {WEBAPP_STORAGE_HOME} o {WEBSITES_ENABLE_APP_SERVICE_STORAGE} No está soportado

Consideraciones y limitaciones de la migración

En la tabla siguiente se muestran las características admitidas actualmente en las aplicaciones de Docker Compose que no se admiten o que tienen compatibilidad limitada en sidecars.

Característica Docker Compose Sidecar
Almacenamiento Volúmenes compartidos entre contenedores Almacenamiento limitado, persistente y específico del contenedor
Redes Nombres de servicios como nombres de host Todos los contenedores comparten localhost; puertos únicos necesarios
Registro y supervisión Controladores personalizados, herramientas externas Integrado con Azure Monitor y Log Analytics
App Service Environment (ASE) Compatible Todavía no se admite
Nubes nacionales Compatible Todavía no se admite

Más recursos