Udostępnij za pośrednictwem


Wdrażanie aplikacji przy użyciu niestandardowego obrazu kontenera

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która jest stanem End Of Life (EOL). Rozważ swoje użycie i zaplanuj odpowiednio. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Uwaga

Plany Basic, Standardi Enterprise weszły w okres wycofywania 17 marca 2025 r. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.

Plan dotyczący zużycia standardowego oraz dedykowany plan zostały wycofane 30 września 2024 r., z całkowitym zamknięciem do końca marca 2025 r. Aby uzyskać więcej informacji, zobacz Migrowanie planów zużycia Standard i dedykowanego planu usługi Azure Spring Apps do Azure Container Apps.

Ten artykuł dotyczy:✅ Standard ✅ Enterprise

W tym artykule wyjaśniono, jak wdrażać aplikacje Spring Boot w usłudze Azure Spring Apps przy użyciu niestandardowego obrazu kontenera. Wdrażanie aplikacji z kontenerem niestandardowym obsługuje większość funkcji, jak podczas wdrażania aplikacji JAR. Inne aplikacje Java i inne niż Java można również wdrożyć przy użyciu obrazu kontenera.

Wymagania wstępne

  • Obraz kontenera zawierający aplikację.
  • Obraz jest przesyłany do rejestru obrazów. Aby uzyskać więcej informacji, zobacz Azure Container Registry.

Uwaga

Aplikacja internetowa musi nasłuchiwać na porcie 1025 planu standardowego i na porcie 8080 planu Enterprise. Sposób zmiany portu zależy od struktury aplikacji. Na przykład określ SERVER_PORT=1025 dla aplikacji Spring Boot lub ASPNETCORE_URLS=http://+:1025/ dla aplikacji ASP.NET Core. Możesz wyłączyć sondę dla aplikacji, które nie nasłuchują na żadnym porcie. Aby uzyskać więcej informacji, zobacz How to configure health probes and graceful termination periods for apps hosted in Azure Spring Apps (Jak skonfigurować sondy kondycji i okresów prolongaty zakończenia dla aplikacji hostowanych w usłudze Azure Spring Apps).

Wdrażanie aplikacji

Aby wdrożyć aplikację w niestandardowym obrazie kontenera, wykonaj następujące kroki:

Aby wdrożyć obraz kontenera, użyj jednego z następujących poleceń:

  • Aby wdrożyć obraz kontenera w publicznej usłudze Docker Hub w aplikacji, użyj następującego polecenia:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Aby wdrożyć obraz kontenera z usługi ACR w aplikacji lub z innego rejestru prywatnego do aplikacji, użyj następującego polecenia:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

Aby zastąpić punkt wejścia obrazu, dodaj następujące dwa argumenty do dowolnego z powyższych poleceń:

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

Aby wyłączyć nasłuchiwanie na porcie obrazów, które nie są aplikacjami internetowymi, dodaj następujący argument do powyższych poleceń:

    --disable-probe true

Macierz wsparcia funkcji

Poniższa macierz pokazuje, jakie funkcje są obsługiwane w poszczególnych typach aplikacji.

Funkcja Aplikacje Spring Boot — wdrażanie kontenerów Aplikacje wielojęzyczne — wdrażanie aplikacji kontenerowych Uwagi
Zarządzanie cyklem życia aplikacji
Obsługa rejestrów kontenerów
Przypisz punkt końcowy
Azure Monitor
Integracja APM Obsługiwane przez instalację ręczną.
Strategia wdrożeniowa niebiesko-zielona
Domena niestandardowa
Skalowanie — skalowanie automatyczne
Skalowanie — skalowanie ręczne (w/wy, w górę/w dół)
Tożsamość zarządzana
Spring Cloud Eureka & Config Server
Portal interfejsu API dla programu VMware Tanzu Tylko plan przedsiębiorstwa.
Spring Cloud Gateway for VMware Tanzu Tylko plan przedsiębiorstwa.
Usługa konfiguracji aplikacji dla programu VMware Tanzu Tylko pakiet biznesowy.
Widok na żywo aplikacji VMware Tanzu Tylko plan przedsiębiorstwa.
Rejestr usługi VMware Tanzu Tylko plan biznesowy.
VNET Dodaj rejestr do listy dozwolonych w sieciowej grupie zabezpieczeń lub w usłudze Azure Firewall.
Wychodzący adres IP
E2E TLS Ufaj urzędowi certyfikacji (CA) z podpisem własnym.
Ustawienia gotowości i żywotności
Zaawansowane rozwiązywanie problemów — zrzut wątku/sterta/JFR (Java Flight Recorder) Obraz musi zawierać powłokę Bash i zestaw JDK z określoną wartością PATH .
Model dostarczania własnego magazynu
Integracja powiązania usługi z łącznikiem zasobów
Strefa dostępności
Zdarzenia cyklu życia aplikacji
Zmniejszony rozmiar aplikacji — 0,5 procesorów wirtualnych i 512 MB
Automatyzowanie wdrożeń aplikacji za pomocą narzędzia Terraform
Miękkie usuwanie
Interaktywne środowisko diagnostyczne (oparte na usłudze AppLens)
SLA

Uwaga

Aplikacje polyglot obejmują aplikacje inne niż Spring Boot Java, NodeJS, AngularJS, Python i .NET.

Typowe kwestie, o których należy pamiętać podczas wdrażania za pomocą kontenera niestandardowego

Poniższe kwestie ułatwią rozwiązanie typowych sytuacji podczas wdrażania przy użyciu obrazu niestandardowego.

Ufaj urzędowi certyfikacji

Istnieją dwie opcje zaufania urzędowi certyfikacji:

Opcja 1. Przekazywanie za pośrednictwem usługi Azure Spring Apps

Aby załadować certyfikaty urzędu certyfikacji do aplikacji, zobacz Używanie certyfikatów TLS/SSL w aplikacji w usłudze Azure Spring Apps. Następnie certyfikaty zostaną zainstalowane w lokalizacji /etc/azure-spring-cloud/certs/public/.

Opcja 2: Ręczna instalacja na obrazie

Aby zaufać certyfikatowi zaufanej jednostki w obrazie, ustaw następujące zmienne w zależności od Twojego środowiska.

  • Aplikacje Java należy zaimportować do magazynu zaufania, dodając następujące wiersze do pliku Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • W przypadku aplikacji Node.js ustaw zmienną NODE_EXTRA_CA_CERTS środowiskową:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • W przypadku języka Python lub innych języków opartych na systemowym magazynie certyfikatów, na obrazach Debian lub Ubuntu, dodaj następujące zmienne środowiskowe:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Dla Pythona lub innych języków korzystających z systemowego magazynu certyfikatów na obrazach opartych na CentOS lub Fedora, dodaj następujące zmienne środowiskowe:

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

Unikaj nieoczekiwanego zachowania w przypadku zmiany obrazów

Gdy aplikacja zostanie ponownie uruchomiona lub przeskalowana w poziomie, najnowszy obraz będzie zawsze ściągany. Jeśli obraz został zmieniony, nowo uruchomione wystąpienia aplikacji będą używać nowego obrazu, a stare wystąpienia będą nadal używać starego obrazu.

Uwaga

Unikaj używania tagu latest lub zastępowania obrazu bez zmiany tagu, aby uniknąć nieoczekiwanego zachowania aplikacji.

Unikaj sytuacji, w której nie można nawiązać połączenia z rejestrem kontenerów w sieci wirtualnej

Jeśli instancja została wdrożona do sieci wirtualnej, upewnij się, że umożliwiasz ruch sieciowy do rejestru kontenerów w grupie zabezpieczeń sieci lub w Azure Firewall (jeśli jest używane). Aby uzyskać więcej informacji, zobacz Obowiązki klienta dotyczące uruchamiania w sieci VNet w celu dodania wymaganych reguł zabezpieczeń.

Ręczne instalowanie aplikacji APM na obrazie

Kroki instalacji różnią się w zależności od różnych monitorów wydajności aplikacji (APM) i języków. Poniższe kroki dotyczą New Relic w przypadku aplikacji Java. Należy zmodyfikować plik Dockerfile , wykonując następujące czynności:

  1. Pobierz i zainstaluj plik agenta na obrazie, dodając następujący kod do pliku Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Dodaj zmienne środowiskowe wymagane przez APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Zmodyfikuj punkt wejścia obrazu, dodając: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Aby zainstalować agentów dla innych języków, zapoznaj się z oficjalną dokumentacją innych agentów:

Nowa relikwia:

Dynatrace:

AppDynamics:

Wyświetlanie dzienników kontenera

Aby wyświetlić logi konsolowe aplikacji kontenera, można użyć następującego polecenia CLI:

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

Aby wyświetlić dzienniki zdarzeń kontenera z usługi Azure Monitor, wprowadź zapytanie:

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

Zrzut ekranu przedstawiający dziennik zdarzeń kontenera w usłudze Azure Monitor.

Skanowanie obrazu pod kątem luk w zabezpieczeniach

Zalecamy użycie usługi Microsoft Defender for Cloud z ACR, aby zapobiec narażeniu Twoich obrazów na luki w zabezpieczeniach. Aby uzyskać więcej informacji, zobacz Microsoft Defender dla Chmury

Przełączanie między wdrażaniem plików JAR i wdrażaniem kontenera

Typ wdrożenia można przełączyć z wdrożenia JAR na wdrożenie kontenera bezpośrednio przez ponowne wdrożenie przy użyciu następującego polecenia:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

Lub odwrotnie:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

Tworzenie innego wdrożenia przy użyciu istniejącego wdrożenia JAR

Możesz utworzyć kolejne wdrożenie przy użyciu istniejącego wdrożenia JAR przy użyciu następującego polecenia:

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

Automatyzowanie wdrożeń przy użyciu usługi Azure Pipelines Tasks lub GitHub Actions jest teraz obsługiwane. Aby uzyskać więcej informacji, zobacz Automatyzowanie wdrożeń aplikacji w usłudze Azure Spring Apps i Używanie ciągłej integracji/ciągłego wdrażania usługi Azure Spring Apps za pomocą funkcji GitHub Actions

Następne kroki