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ż odpowiednie użycie i zaplanuj. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.
Uwaga
Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.
Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi 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 wypychany 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 obsługi funkcji
Poniższa macierz pokazuje, jakie funkcje są obsługiwane w poszczególnych typach aplikacji.
Funkcja | Aplikacje Spring Boot — wdrażanie kontenerów | Aplikacje wielolotowe — wdrażanie kontenerów | Uwagi |
---|---|---|---|
Zarządzanie cyklem życia aplikacji | ✔️ | ✔️ | |
Obsługa rejestrów kontenerów | ✔️ | ✔️ | |
Przypisywanie punktu końcowego | ✔️ | ✔️ | |
Azure Monitor | ✔️ | ✔️ | |
Integracja Z usługą APM | ✔️ | ✔️ | Obsługiwane przez instalację ręczną. |
Wdrożenie niebieskie/zielone | ✔️ | ✔️ | |
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 plan przedsiębiorstwa. |
Widok na żywo aplikacji dla programu VMware Tanzu | ✔️ | ❌ | Tylko plan przedsiębiorstwa. |
Rejestr usługi VMware Tanzu | ✔️ | ❌ | Tylko plan przedsiębiorstwa. |
Sieć wirtualna | ✔️ | ✔️ | Dodaj rejestr, aby dodać listę dozwolonych w sieciowej grupie zabezpieczeń lub w usłudze Azure Firewall. |
Wychodzący adres IP | ✔️ | ✔️ | |
E2E TLS | ✔️ | ✔️ | Ufaj urzędowi certyfikacji z podpisem własnym. |
Ustawienia gotowości i aktualności | ✔️ | ✔️ | |
Zaawansowane rozwiązywanie problemów — zrzut wątku/sterta/JFR | ✔️ | ❌ | Obraz musi zawierać powłokę Bash i zestaw JDK z określoną wartością PATH . |
Model dostarczania własnego magazynu | ✔️ | ✔️ | |
Integrowanie 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 | ✔️ | ✔️ | |
Usuwanie nietrwałe | ✔️ | ✔️ | |
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 ufać urzędowi certyfikacji na obrazie, ustaw następujące zmienne w zależności od ś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 magazynie systemowego urzędu certyfikacji 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
W przypadku języka Python lub innych języków opartych na magazynie urzędu certyfikacji systemu na obrazach opartych na systemie 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 nawiązywania połączenia z rejestrem kontenerów w sieci wirtualnej
Jeśli wystąpienie zostało wdrożone w sieci wirtualnej, upewnij się, że zezwalasz na ruch sieciowy do rejestru kontenerów w sieciowej grupie zabezpieczeń lub w usłudze Azure Firewall (jeśli jest używana). Aby uzyskać więcej informacji, zobacz Obowiązki klienta dotyczące uruchamiania w sieci wirtualnej 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ą nowych aplikacji Relic z aplikacjami Java. Należy zmodyfikować plik Dockerfile , wykonując następujące czynności:
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
Dodaj zmienne środowiskowe wymagane przez APM:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
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:
- Python: instalowanie agenta języka Python
- Node.js: instalowanie agenta Node.js
Dynatrace:
- Python: Instrumentowanie aplikacji języka Python przy użyciu biblioteki OpenTelemetry
- Node.js: Instrumentacja aplikacji Node.js za pomocą platformy OpenTelemetry
AppDynamics:
- Python: instalowanie agenta języka Python
- Node.js: instalowanie agenta Node.js
Wyświetlanie dzienników kontenera
Aby wyświetlić dzienniki konsoli aplikacji kontenera, można użyć następującego polecenia interfejsu wiersza polecenia:
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"
Skanowanie obrazu pod kątem luk w zabezpieczeniach
Zalecamy używanie Microsoft Defender dla Chmury z usługą ACR, aby zapobiec zagrożeniom obrazów. 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