Udostępnij przez


Migrowanie aplikacji Docker Compose do przyczepek w usłudze Azure App Service

Jeśli używasz aplikacji Docker Compose w usłudze Azure App Service, należy przeprowadzić migrację do przyczepek. Istnieją dwie główne strategie migracji aplikacji Docker Compose do przyczepek.

  • Migracja oparta na skryptach — zalecana w przypadku prostych konfiguracji.
  • Migracja ręczna

Wymagania wstępne

  • PowerShell
  • Azure CLI
  • Docker (do kompilowania i wypychania obrazów)

Migrowanie za pomocą skryptu

Jeśli plik Docker Compose jest prosty, możesz użyć oficjalnego skryptu migracji, aby zautomatyzować proces.

Ważne

Przed uruchomieniem skryptu migracji zawsze należy utworzyć kopię zapasową aplikacji z witryny Azure Portal.

  1. Pobierz skrypt migracyjny z repozytorium przykładowych skryptów Azure na GitHubie.

  2. Uruchom skrypt w programie PowerShell, podając identyfikator subskrypcji, nazwę aplikacji internetowej, grupę zasobów, adres URL rejestru, plik Docker Compose zakodowany w formacie base64, nazwę głównej usługi i port docelowy.

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

    Jeśli rejestr wymaga uwierzytelniania, skrypt wyświetli monit o podanie dockerRegistryServerUsername i dockerRegistryServerPassword interakcyjnie.

Migruj ręcznie

  1. Zaloguj się do Azure i ustaw swoją subskrypcję.

    az login
    az account set --subscription <your-subscription-id>
    
  2. Zbierz wymagane szczegóły.

    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
    

    Ułatwi to zidentyfikowanie identyfikatora subskrypcji, nazwy aplikacji, grupy zasobów i rejestru kontenerów platformy Azure.

  3. Utwórz gniazdo wdrożeniowe. Przed przełączeniem slotu do środowiska produkcyjnego zweryfikujesz zmigrowane sidecary.

    az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  4. Zdekoduj istniejącą konfigurację narzędzia Docker Compose z aplikacji produkcyjnej.

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

    Skopiuj część base64 z danych wyjściowych i zdekoduj ją w programie PowerShell:

    [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))
    
  5. Dla każdej usługi w pliku Compose utwórz odpowiedni container zasób w miejscu wdrożenia pod ścieżką sitecontainers adresu URL:

    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>}}'
    
    • Użyj mapowania atrybutów narzędzia Docker Compose i konfiguracji przyczepki , aby ułatwić mapowanie.

    • Użyj nazwy kontenera, której chcesz użyć w pliku <container-name>.

    • Ustaw isMain dla głównego kontenera aplikacji, false dla sidecars.

    • Dla <image-name> użyj pełnej ścieżki do obrazu zawierającej nazwę serwera. Przykład:

      "image":"myregistry.azurecr.io/myapp/backend:latest"
      
    • Powtórz dla wszystkich kontenerów.

  6. Przełącz slot wdrożeniowy, aby używać trybu sidecar.

    az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"
    
  7. Uruchom ponownie miejsce wdrożenia, a następnie zweryfikuj funkcjonalność zmigrowanej aplikacji w miejscu wdrożenia.

    az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>
    
  8. Po zweryfikowaniu zamień miejsce na środowisko produkcyjne:

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

Mapowanie atrybutów narzędzia Docker Compose i konfiguracji przyczepki

Następujące pola narzędzia Docker Compose są mapowane na konfigurację przyczepki:

Docker Compose Konfiguracja przyczepki Notatki
command, entrypoint startUpCommand
environment environmentVariables
image image
ports targetPort Tylko porty 80 i 8080 są obsługiwane dla ruchu zewnętrznego.
volumes volumeMounts Trwała pamięć masowa platformy Azure nie jest obsługiwana.

Następujące pola konfiguracji Docker Compose nie są obsługiwane w sidecarach:

Pole redagowania platformy Docker Wsparcie Notatki
build Niedozwolone Wstępne kompilowanie i wypychanie obrazów do rejestru.
depends_on Ignorowane Nie ma gwarantowanej kolejności uruchamiania kontenera.
networks Ignorowane Sieć jest obsługiwana wewnętrznie.
secrets Ignorowane Używaj ustawień aplikacji App Service lub usługi Key Vault dla sekretów.
volumes przy użyciu {WEBAPP_STORAGE_HOME} lub {WEBSITES_ENABLE_APP_SERVICE_STORAGE} Niewspierane

Ograniczenia i zagadnienia dotyczące migracji

W poniższej tabeli przedstawiono funkcje obecnie obsługiwane w aplikacjach platformy Docker Compose, które nie są obsługiwane lub mają ograniczone wsparcie w kontenerach pomocniczych.

Funkcja Docker Compose Wózek boczny
Magazyn Woluminy współużytkowane między kontenerami Trwała pamięć ograniczona dla konkretnego kontenera
Sieć Nazwy usług jako nazwy hostów Wszystkie kontenery są współużytkowane localhost, wymagane są unikatowe porty
Rejestrowanie i monitorowanie Sterowniki niestandardowe, narzędzia zewnętrzne Integracja z usługami Azure Monitor i Log Analytics
Środowisko App Service Environment (ASE) Wsparte Jeszcze nie jest obsługiwane
Chmury krajowe Wsparte Jeszcze nie jest obsługiwane

Więcej zasobów