Bereitstellen einer Anwendung mit einem benutzerdefinierten Containerimage

Achtung

Dieser Artikel bezieht sich auf CentOS, eine Linux-Distribution, deren Dienstende (End-of-Life, EOL) ansteht. Sie sollten Ihre Nutzung entsprechend planen. Weitere Informationen finden Sie im CentOS End-of-Life-Leitfaden.

Hinweis

Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von drei Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.

Der Plan Standardverbrauch und dediziert gilt ab dem 30. September 2024 als veraltet und wird nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren vom Plan „Standardverbrauch und dediziert“ von Azure Spring Apps zu Azure Container Apps.

Dieser Artikel gilt für: ✔️ Standard ✔️ Enterprise

In diesem Artikel wird erläutert, wie Sie Spring Boot-Anwendungen in Azure Spring Apps mithilfe eines benutzerdefinierten Containerimages bereitstellen. Das Bereitstellen einer Anwendung mit einem benutzerdefinierten Container unterstützt die meisten Funktionen, so wie bei der Bereitstellung einer JAR-Anwendung. Andere Java- und Nicht-Java-Anwendungen können auch mit dem Containerimage bereitgestellt werden.

Voraussetzungen

  • Ein Containerimage, das die Anwendung enthält.
  • Das Bild wird an eine Bildregistrierung gepusht. Weitere Informationen finden Sie unter Azure Container Registry.

Hinweis

Die Webanwendung muss an Port 1025 für den Standard-Plan und an Port 8080 für den Enterprise-Plan lauschen. Die Möglichkeit, den Port zu ändern, hängt vom Framework der Anwendung ab. Geben Sie beispielsweise SERVER_PORT=1025 für Spring Boot-Anwendungen und ASPNETCORE_URLS=http://+:1025/ für ASP.NET Core-Anwendungen an. Sie können den Test für Anwendungen deaktivieren, die an keinem Port lauschen. Weiter Informationen finden Sie unter Konfigurieren von Integritätstests und Zeiträume für die ordnungsgemäße Beendigung von Apps, die in Azure Spring Apps gehostet werden.

Bereitstellen der Anwendung

Verwenden Sie die folgenden Schritte, um eine Anwendung in einem benutzerdefinierten Containerimage bereitzustellen:

Verwenden Sie zum Bereitstellen eines Containerimages einen der folgenden Befehle:

  • Verwenden Sie den folgenden Befehl, um ein Containerimage für die öffentliche Docker Hub einer App bereitzustellen:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Um ein Containerimage von ACR in einer App oder von einer anderen privaten Registrierung in einer App bereitzustellen, verwenden Sie den folgenden Befehl:

    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>
    

Um den Einstiegspunkt des Bilds zu überschreiben, fügen Sie die folgenden beiden Argumente zu einem der obigen Befehle hinzu:

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

Um das Überwachen eines Ports für Bilder zu deaktivieren, die keine Webanwendungen sind, fügen Sie dem obigen Befehl das folgende Argument hinzu:

    --disable-probe true

Unterstützungsmatrix für Funktionen

Die folgende Matrix zeigt, welche Funktionen in jedem Anwendungstyp unterstützt werden.

Funktion Spring Boot Apps – Containerbereitstellung Polyglot Apps – Containerbereitstellung Hinweise
App-Lebenszyklusverwaltung ✔️ ✔️
Suchen Sie nach Containerregistrierungen ✔️ ✔️
Zuweisen eines Endpunkts ✔️ ✔️
Azure Monitor ✔️ ✔️
APM-Integrationen ✔️ ✔️ Unterstützt durch manuelle Installation.
Blau/Grün-Bereitstellung ✔️ ✔️
Benutzerdefinierte Domäne ✔️ ✔️
Skalierung: automatische Skalierung ✔️ ✔️
Skalierung: manuelle Skalierung (horizontal herunter/horizontal, auf/ab) ✔️ ✔️
Verwaltete Identität ✔️ ✔️
Spring Cloud Eureka und Config Server ✔️
API-Portal für VMware Tanzu ✔️ ✔️ Nur Enterprise-Plan
Spring Cloud-Gateway für VMware Tanzu ✔️ ✔️ Nur Enterprise-Plan
Anwendungskonfigurationsdienst für VMware Tanzu ✔️ Nur Enterprise-Plan
Anwendungsliveansicht für VMware Tanzu ✔️ Nur Enterprise-Plan
VMware Tanzu-Dienstregistrierung ✔️ Nur Enterprise-Plan
VNET ✔️ ✔️ Fügen Sie die Registrierung zur Positivliste in NSG oder Azure Firewall hinzu.
Ausgehende IP-Adresse ✔️ ✔️
E2E TLS ✔️ ✔️ Vertrauen Sie einer selbstsignierten Zertifizierungsstelle.
Überprüfung des Live-Zustands und der Lesbarkeitseinstellungen ✔️ ✔️
Erweiterte Problembehandlung: Thread/Heap/JFR-Speicherabbild ✔️ Das Image muss Bash enthalten und JDK mit PATH angegeben werden.
Bring Your Own Storage (BYOS) ✔️ ✔️
Integrieren der Dienstbindung in den Ressourcenconnector ✔️
Verfügbarkeitszone ✔️ ✔️
App-Lebenszyklusereignisse ✔️ ✔️
Reduzierte App-Größe: 0,5 vCPU und 512 MB ✔️ ✔️
Automatisieren von App-Bereitstellungen mit Terraform ✔️ ✔️
Vorläufiges Löschen ✔️ ✔️
Interaktive Diagnosebenutzeroberfläche (AppLens-basiert) ✔️ ✔️
SLA ✔️ ✔️

Hinweis

Polyglot-Apps umfassen Nicht-Spring Boot Java, NodeJS, AngularJS, Python und .NET-Apps.

Allgemeine Punkte, die beim Bereitstellen mit einem benutzerdefinierten Container beachtet werden

Die folgenden Punkte helfen Ihnen bei der Behebung allgemeiner Situationen bei der Bereitstellung mit einem benutzerdefinierten Image.

Vertrauen in eine Zertifizierungsstelle

Es gibt zwei Optionen, um einer Zertifizierungsstelle zu vertrauen:

Option 1: Hochladen über Azure Spring Apps

Informationen zum Laden der Zertifizierungsstellenzertifikate in Ihre Apps finden Sie unter Verwenden von TLS/SSL-Zertifikaten in Ihrer Anwendung in Azure Spring Apps. Anschließend werden die Zertifikate am Speicherort /etc/azure-spring-cloud/certs/public/ eingebunden.

Option 2: Manuelle Installation im Image

Wenn Sie einer Zertifizierungsstelle im Image vertrauen möchten, legen Sie die folgenden Variablen abhängig von Ihrer Umgebung fest:

  • Sie müssen Java-Anwendungen in den Vertrauensspeicher importieren, indem Sie die folgenden Zeilen in Ihre Dockerfile hinzufügen:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Legen Sie für Node.js Anwendungen die NODE_EXTRA_CA_CERTS-Umgebungsvariable fest:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Fügen Sie für Python oder andere Sprachen, die auf dem System-CA-Speicher basieren, auf Debian- oder Ubuntu-Images die folgenden Umgebungsvariablen hinzu:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Fügen Sie für Python oder andere Sprachen, die auf dem System-CA-Speicher basieren, auf CentOS- oder Fedora-Images die folgenden Umgebungsvariablen hinzu:

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

Vermeiden sie unerwartetes Verhalten, wenn Bilder sich ändern

Wenn Ihre Anwendung neu gestartet oder skaliert wird, wird das neueste Bild immer abgerufen. Wenn das Bild geändert wurde, verwenden die neu gestarteten Anwendungsinstanzen das neue Bild, während die alten Instanzen weiterhin das alte Bild verwenden.

Hinweis

Vermeiden Sie die Verwendung des latest-Tags oder überschreiben Sie das Bild ohne Tag-Änderung, um unerwartetes Anwendungsverhalten zu vermeiden.

Vermeiden Sie, keine Verbindung mit der Containerregistrierung in einem VNet herzustellen

Wenn Sie die Instanz in einem VNet bereitgestellt haben, stellen Sie sicher, dass Sie den Netzwerkdatenverkehr zum Container in der NSG oder Azure Firewall (sofern verwendet) zulassen. Weitere Informationen finden Sie unter Kundenverantwortung für die Ausführung in VNet, um die erforderlichen Sicherheitsregeln hinzuzufügen.

Manuelles Installieren eines APM in das Image

Die Installationsschritte variieren je nach Anwendungs-Systemmonitor (Application Performance Monitor, APMs) und Sprachen. Die folgenden Schritte gelten für New Relic mit Java-Anwendungen. Sie müssen die Dockerfile mithilfe der folgenden Schritte ändern:

  1. Laden Sie die Agent-Datei in das Image herunter und installieren Sie sie, indem Sie der Dockerfile folgendes hinzufügen:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Fügen Sie die von der APM erforderlichen Umgebungsvariablen hinzu:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Ändern Sie den Einstiegspunkt des Bilds, indem Sie Folgendes hinzufügen: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Informationen zum Installieren der Agents für andere Sprachen finden Sie in der offiziellen Dokumentation für die anderen Agents:

New Relic:

Dynatrace:

AppDynamics:

Anzeigen der Containerprotokolle

Um die Konsolenprotokolle Ihrer Containeranwendung anzuzeigen, kann der folgende CLI-Befehl verwendet werden:

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

Um die Containerereignissprotokolle aus dem Azure Monitor anzuzeigen, geben Sie die Abfrage ein:

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

Screenshot des Azure Monitor, der das Containerereignisseprotokoll anzeigt.

Überprüfen Ihrer Images auf Sicherheitsrisiken

Es wird empfohlen, Microsoft Defender für Cloud mit ACR zu verwenden, um zu verhindern, dass Ihre Bilder anfällig sind. Weitere Informationen finden Sie unter Microsoft Defender for Cloud.

Wechseln zwischen JAR-Bereitstellung und Containerbereitstellung

Sie können den Bereitstellungstyp direkt von JAR-Bereitstellung auf Container-Bereitstellung umstellen, indem Sie den folgenden Befehl erneut bereitstellen:

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

Oder umgekehrt:

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

Erstellen einer anderen Bereitstellung mit einer vorhandenen JAR-Bereitstellung

Sie können eine andere Bereitstellung mithilfe einer vorhandenen JAR-Bereitstellung mithilfe des folgenden Befehls erstellen:

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

Die Automatisierung von Bereitstellungen mit Azure Pipelines-Aufgaben oder GitHub Actions wird jetzt unterstützt. Weitere Informationen finden Sie unter Automatisieren von Anwendungsbereitstellungen für Azure Spring Apps und Verwenden von Azure Spring Apps-CI/CD mit GitHub Actions.

Nächste Schritte