Partilhar via


Migrar aplicativos Docker Compose para sidecars no Serviço de Aplicativo do Azure

Se você estiver executando um aplicativo Docker Compose no Serviço de Aplicativo do Azure, deverá migrá-lo para sidecars. Há duas estratégias principais para migrar um aplicativo Docker Compose para sidecars.

  • Migração baseada em script - recomendada para configurações simples.
  • Migração manual

Pré-requisitos

  • PowerShell
  • Azure CLI (Interface de Linha de Comando da Azure)
  • Docker (para criação e envio de imagens)

Migrar com um script

Se o arquivo Docker Compose for simples, você poderá usar o script de migração oficial para automatizar o processo.

Importante

Sempre faça backup de seu aplicativo do portal do Azure antes de executar o script de migração.

  1. Baixe o script de migração do repositório GitHub de Exemplos do Azure.

  2. Execute o script no PowerShell, fornecendo sua ID de assinatura, nome do aplicativo Web, grupo de recursos, URL do Registro, arquivo Docker Compose codificado em base64, nome do serviço principal e porta de destino.

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

    Se o seu registro requer autenticação, o script solicita que você forneça dockerRegistryServerUsername e dockerRegistryServerPassword interativamente.

Migrar manualmente

  1. Inicie sessão no Azure e defina a sua subscrição.

    az login
    az account set --subscription <your-subscription-id>
    
  2. Reúna os detalhes necessários.

    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
    

    Isso ajudará você a identificar sua ID de assinatura, nome do aplicativo, grupo de recursos e registro de contêiner do Azure.

  3. Crie um slot de implantação. Você validará os sidecars migrados antes de mudar o slot para a produção.

    az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  4. Decodifice a configuração existente do Docker Compose a partir do aplicativo de produção.

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

    Copie a parte base64 da saída e decodifice-a no PowerShell:

    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))
    
  5. Para cada serviço no seu ficheiro Compose, crie um recurso correspondente container no slot de implantação sob o caminho de 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>}}'
    
    • Use o mapeamento de atributos de composição do Docker e a configuração do sidecar para ajudá-lo com o mapeamento.

    • Use um nome de contêiner desejado no <container-name>.

    • Defina isMain como true para o contêiner principal do aplicativo, false para sidecars.

    • Para <image-name>, use o caminho completo para a imagem que inclui o nome do servidor. Por exemplo:

      "image":"myregistry.azurecr.io/myapp/backend:latest"
      
    • Repita para todos os recipientes.

  6. Mude o slot de implantação para usar o modo sidecar.

    az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"
    
  7. Reinicie o slot de implantação e valide a funcionalidade do aplicativo migrado no slot de implantação.

    az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  8. Uma vez validado, troque o slot para produção:

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

Mapeamento de atributos do Docker Compose e configuração de sidecar

Os seguintes campos Docker Compose são mapeados para a configuração do sidecar:

Docker Compose Configuração do sidecar Observações
command, entrypoint startUpCommand
environment environmentVariables
image image
ports targetPort Apenas as portas 80 e 8080 são suportadas para tráfego externo.
volumes volumeMounts Armazenamento persistente do Azure não suportado.

Os campos seguintes do Docker Compose não têm suporte em sidecars:

Campo de composição do Docker Apoio Observações
build Não permitido Prepare antecipadamente e envie imagens para um registo.
depends_on Ignorado Nenhum pedido de inicialização de contêiner é garantido.
networks Ignorado A rede é gerida internamente.
secrets Ignorado Use as definições de aplicações do App Service ou o Azure Key Vault para segredos.
volumes utilizando {WEBAPP_STORAGE_HOME} ou {WEBSITES_ENABLE_APP_SERVICE_STORAGE} Não suportado

Limitações e considerações sobre migração

A tabela a seguir mostra os recursos atualmente suportados nas aplicações Docker Compose que não são suportados ou têm suporte limitado em sidecars.

Característica Docker Compose Sidecar
Armazenamento Volumes compartilhados entre contêineres Armazenamento persistente específico do contêiner limitado
Rede Nomes de serviço como nomes de host Todos os contentores partilham localhost; são necessárias portas únicas
Registo e monitorização Controladores personalizados, ferramentas externas Integrado com o Azure Monitor e o Log Analytics
Ambiente de Serviço de Aplicações (ASE) Suportado Ainda não suportado
Nuvens Nacionais Suportado Ainda não suportado

Mais recursos