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:
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
Fügen Sie die von der APM erforderlichen Umgebungsvariablen hinzu:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
Ä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:
- Python: Installieren des Python-Agents
- Node.js: Installieren des Node.js-Agents
Dynatrace:
- Python: Instrument Python-Anwendungen mit OpenTelemetry
- Node.js: Instrument Node.js Anwendungen mit OpenTelemetry
AppDynamics:
- Python: Installieren des Python-Agents
- Node.js: Installieren des Node.js-Agents
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"
Ü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.