Bereitstellen einer Java-Anwendung mit Open Liberty oder WebSphere Liberty in Azure Container Apps
In diesem Artikel erfahren Sie, wie Sie Open Liberty oder WebSphere Liberty in Azure Container Apps ausführen. In diesem Artikel führen Sie die folgenden Aktivitäten aus:
- Führen Sie Ihre Java-, Java EE-, Jakarta EE- oder MicroProfile-Anwendung in der Open Liberty- oder WebSphere Liberty-Runtime aus.
- Erstellen Sie das Docker-Image der Anwendung mit Liberty-Containerimages.
- Stellen Sie die containerisierte Anwendung in Azure Container Apps bereit.
Weitere Informationen zu Open Liberty finden Sie auf der Open Liberty-Projektseite. Weitere Informationen zu IBM WebSphere Liberty finden Sie auf der WebSphere Liberty-Produktseite.
Dieser Artikel soll Ihnen helfen, schnell zur Bereitstellung zu gelangen. Bevor Sie in die Produktion gehen, sollten Sie Tuning Liberty erkunden.
Wenn Sie an Feedback oder daran interessiert sind, eng mit dem Entwicklungsteam, das die WebSphere-Lösungen für Azure entwickelt, an Ihren Migrationsszenarien zu arbeiten, füllen Sie diese kurze Umfrage zur WebSphere-Migration aus und geben Sie Ihre Kontaktinformationen an. Das Team aus Programmmanagern, Architekten und Technikern wird sich umgehend mit Ihnen in Verbindung setzen, um eine enge Zusammenarbeit zu initiieren.
Voraussetzungen
- Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
- Bereiten Sie einen lokalen Computer mit installiertem Windows- oder UNIX-ähnlichem Betriebssystem vor (z. B. Ubuntu, macOS oder Windows-Subsystem für Linux).
- Installieren Sie die Azure CLI 2.53.0 oder höher zum Ausführen von Azure CLI-Befehlen.
- Melden Sie sich mit dem Befehl az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
- Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
- Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
- Installieren Sie eine Java SE-Implementierung Version 17 oder später (z. B den Microsoft-Build von OpenJDK).
- Installieren Sie Maven 3.5.0 oder höher.
- Installieren Sie Docker für Ihr Betriebssystem.
- Sicherstellen, dass Git installiert ist
Anmelden bei Azure
Falls noch nicht geschehen, melden Sie sich mit dem folgenden az login-Befehl bei Ihrem Azure-Abonnement an, und befolgen Sie die Anweisungen auf dem Bildschirm.
az login
Hinweis
Sie können die meisten Azure CLI-Befehle in PowerShell wie in Bash ausführen. Es gibt nur einen Unterschied bei der Verwendung von Variablen. In den folgenden Abschnitten wird bei Bedarf in verschiedenen Registerkarten auf die Unterschiede eingegangen.
Wenn Sie mehrere Azure-Mandanten mit Ihren Anmeldeinformationen verknüpft haben, müssen Sie angeben, bei welchem Mandanten Sie sich anmelden möchten. Sie können dazu die --tenant
-Option, z. B. az login --tenant contoso.onmicrosoft.com
verwenden.
Wenn Sie über mehrere Abonnements innerhalb eines einzelnen Mandanten verfügen, stellen Sie sicher, dass Sie mit dem Abonnement angemeldet sind, das Sie unter Verwendung von az account set --subscription <subscription-id>
nutzen möchten.
Erstellen einer Ressourcengruppe
Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden.
Erstellen Sie am Standort eastus mithilfe des Befehls az group create die Ressourcengruppe java-liberty-project. Diese Ressourcengruppe wird später zum Erstellen der Azure Container Registry-Instanz (ACR) und der Azure Container Apps-Instanz verwendet.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Erstellen einer ACR-Instanz
Verwenden Sie den Befehl az acr create zum Erstellen der ACR-Instanz. Im folgenden Beispiel wird die ACR-Instanz youruniqueacrname erstellt. Stellen Sie sicher, dass youruniqueacrname in Azure eindeutig ist.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Nach kurzer Zeit sollte eine JSON-Ausgabe angezeigt werden, die die folgenden Zeilen enthält:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Herstellen einer Verbindung mit der ACR-Instanz
Sie müssen sich bei der ACR-Instanz anmelden, bevor Sie ein Image an diese pushen können. Wenn Sie Befehle lokal ausführen möchten, stellen Sie sicher, dass der Docker-Daemon ausgeführt wird, und führen Sie die folgenden Befehle aus, um die Verbindung zu überprüfen:
export ACR_LOGIN_SERVER=$(az acr show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
export ACR_USER_NAME=$(az acr credential show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'username' \
--output tsv)
export ACR_PASSWORD=$(az acr credential show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'passwords[0].value' \
--output tsv)
docker login $ACR_LOGIN_SERVER -u $ACR_USER_NAME -p $ACR_PASSWORD
Wenn Sie sich bei der ACR-Instanz erfolgreich angemeldet haben, sollte am Ende der Befehlsausgabe Login Succeeded
angezeigt werden.
Erstellen einer Umgebung
Eine Umgebung in Azure Container Apps erstellt eine sichere Grenze für eine Gruppe von Container-Apps. Container-Apps, die in derselben Umgebung bereitgestellt werden, werden im gleichen virtuellen Netzwerk bereitgestellt und schreiben Protokolle in denselben Log Analytics-Arbeitsbereich. Verwenden Sie den Befehl az containerapp env create, um eine Umgebung zu erstellen. Im folgenden Beispiel wird eine Umgebung mit dem Namen youracaenvname erstellt:
export ACA_ENV=youracaenvname
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--location eastus \
--name $ACA_ENV
Wenn Sie aufgefordert werden, eine Erweiterung zu installieren, antworten Sie mit Y.
Nach kurzer Zeit sollte eine JSON-Ausgabe angezeigt werden, die die folgenden Zeilen enthält:
"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",
Erstellen einer Azure-SQL-Datenbank
In diesem Abschnitt erstellen Sie eine Einzeldatenbank in der Azure SQL-Datenbank für die Verwendung mit Ihrer App.
Erstellen Sie eine Einzeldatenbank in der Azure SQL-Datenbank, indem Sie die Azure CLI-Schritte unter Schnellstart: Erstellen einer Einzeldatenbank – Azure SQL-Datenbank ausführen. Führen Sie die Schritte bis zu (jedoch nicht einschließlich) Abfragen der Datenbank aus. Befolgen Sie die folgenden Schritte, während Sie den Artikel durchgehen, kehren Sie dann nach dem Erstellen und Konfigurieren des Datenbankservers zu diesem Dokument zurück:
Wenn Sie den Abschnitt Festlegen der Parameterwerte erreichen, geben Sie die Werte der Variablen im Codebeispiel mit der Bezeichnung Variable block
, einschließlich resourceGroup
,server
, database
, login
und password
ein und speichern Sie diese. Definieren Sie die folgenden Umgebungsvariablen, nachdem Sie die Platzhalter <resourceGroup>
,<server>
, <database>
, <login>
und <password>
durch diese Werte ersetzt haben.
export DB_RESOURCE_GROUP=<resourceGroup>
export DB_SERVER_NAME=<server>.database.windows.net
export DB_NAME=<database>
export DB_USER=<login>
export DB_PASSWORD=<password>
Wenn Sie die Anwendung später lokal testen möchten, führen Sie die folgenden Schritte aus, um sicherzustellen, dass Ihre Client-IPv4-Adresse eine Verbindung herstellen darf:
Suchen Sie im Portal nach SQL-Datenbanken, und wählen Sie den Eintrag aus. Wählen Sie anschließend in der Liste Ihre Datenbank aus.
Wählen Sie Übersicht aus.
Stellen Sie sicher, dass die Registerkarte Erste Schritte in der Mitte der Seite ausgewählt ist.
Wählen Sie unter Zugriff konfigurieren die Option Konfigurieren aus.
Wählen Sie Client-IPv4-Adresse hinzufügen aus.
Wählen Sie Speichern.
Sie können die Firewallregeln im Bereich Netzwerk und Öffentlicher Zugriff finden und konfigurieren.
Konfigurieren und Erstellen des Anwendungsimages
Zum Bereitstellen und Ausführen Ihrer Liberty-Anwendung in Azure Container Apps müssen Sie Ihre Anwendung mit Open Liberty-Containerimages oder WebSphere Liberty-Containerimages als Docker-Image containerisieren.
Führen Sie die Schritte in diesem Abschnitt aus, um die Beispielanwendung in der Liberty-Laufzeit zu implementieren. In diesen Schritten wird Maven verwendet.
Auschecken der Anwendung
Verwenden Sie die folgenden Befehle, um den Beispielcode für diesen Leitfaden vorzubereiten. Das Beispiel befindet sich auf GitHub.
git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
git checkout 20231026
Wenn eine Meldung darüber angezeigt wird, dass der Zustand detached HEAD
lautet, kann diese Nachricht problemlos ignoriert werden. Sie bedeutet nur, dass Sie ein Tag ausgecheckt haben.
In diesem Artikel wird java-app verwendet. Hier ist die Dateistruktur der Anwendung:
java-app
├─ src/main/
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
Die Verzeichnisse java, resources und webapp enthalten den Quellcode der Beispielanwendung. Der Code deklariert und verwendet eine Datenquelle mit dem Namen jdbc/JavaEECafeDB
.
Im java-app-Stammverzeichnis gibt es zwei Dateien, um das Anwendungsimage entweder mit Open Liberty oder WebSphere Liberty zu erstellen.
Im Verzeichnis liberty/config wird die Datei server.xml verwendet, um die DB-Verbindung für den Open Liberty- und WebSphere Liberty-Cluster zu konfigurieren.
Erstellen des Projekts
Führen Sie den folgenden Befehl aus, um die Anwendung zu erstellen:
cd <path-to-your-repo>/java-app
mvn clean install
Wenn der Build erfolgreich ist, sollten Sie am Ende Ihres Builds eine Ausgabe ähnlich der folgenden sehen.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------
Wenn diese Ausgabe nicht angezeigt wird, beheben Sie das Problem, bevor Sie fortfahren.
(Optional:) Lokales Testen Ihres Projekts
Sie können nun die folgenden Schritte verwenden, um das Projekt vor der Bereitstellung in Azure lokal auszuführen und zu testen. Verwenden Sie der Einfachheit halber liberty-maven-plugin
. Weitere Informationen zu liberty-maven-plugin
finden Sie unter Erstellen einer Webanwendung mit Maven. Für Ihre Anwendung können Sie ähnliche Aktionen mit jedem anderen Mechanismus ausführen, z. B. Ihrer lokalen IDE.
Hinweis
Wenn Sie eine „serverlose“ Datenbankbereitstellung ausgewählt haben, stellen Sie sicher, dass Ihre SQL-Datenbank nicht in den Modus „Angehalten“ gewechselt ist. Eine Möglichkeit hierzu besteht darin, sich wie in Schnellstart: Verwenden des Azure-Portal-Abfrageeditors (Vorschauversion) zur Abfrage der Azure SQL-Datenbank beschrieben, beim Datenbank-Abfrageeditor anzumelden.
Starten Sie die Anwendung mithilfe von
liberty:run
.liberty:run
verwendet die datenbankbezogenen Umgebungsvariablen, die im vorherigen Schritt definiert sind.cd <path-to-your-repo>/java-app mvn liberty:run
Überprüfen Sie, ob die Anwendung wie erwartet funktioniert. Bei erfolgreicher Ausführung sollte in der Befehlsausgabe eine ähnliche Meldung wie
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
angezeigt werden. Navigieren Sie in Ihrem Browser zuhttp://localhost:9080/
, um zu überprüfen, ob auf die Anwendung zugegriffen werden kann und alle Funktionen funktionieren.Drücken Sie STRG+C, um zu beenden.
Erstellen des Image
Sie können nun den docker buildx build
-Befehl ausführen, um das Image, wie im folgenden Beispiel dargestellt, zu erstellen:
cd <path-to-your-repo>/java-app
# If you are running with Open Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .
# If you are running with WebSphere Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .
(Optional) Lokales Testen des Docker-Images
Sie können nun die folgenden Schritte ausführen, um das Docker-Image vor der Bereitstellung in Azure lokal zu testen:
Führen Sie das Image mithilfe des folgenden Befehls aus. Dieser Befehl verwendet die datenbankbezogenen Umgebungsvariablen, die zuvor definiert wurden.
docker run -it --rm -p 9080:9080 \ -e DB_SERVER_NAME=${DB_SERVER_NAME} \ -e DB_NAME=${DB_NAME} \ -e DB_USER=${DB_USER} \ -e DB_PASSWORD=${DB_PASSWORD} \ javaee-cafe:v1
Sobald der Container gestartet wird, wechseln Sie in Ihrem Browser zu
http://localhost:9080/
, um auf die Anwendung zuzugreifen.Drücken Sie STRG+C, um zu beenden.
Hochladen eines Images in ACR
Laden Sie als Nächstes das erstellte Image in die ACR hoch, die Sie in den vorherigen Schritten erstellt haben.
Wenn Sie dies noch nicht getan haben, verwenden Sie den folgenden Befehl, um sich bei ACR anzumelden:
docker login -u ${ACR_USER_NAME} -p ${ACR_PASSWORD} ${ACR_LOGIN_SERVER}
Verwenden Sie die folgenden Befehle, um das Containerimage zu markieren und zu pushen:
docker tag javaee-cafe:v1 ${ACR_LOGIN_SERVER}/javaee-cafe:v1
docker push ${ACR_LOGIN_SERVER}/javaee-cafe:v1
Bereitstellen der Anwendung in Azure Container Apps
Verwenden Sie die folgenden Befehle, um eine Azure Container Apps-Instanz zu erstellen und die App nach dem Abrufen des Images aus dem ACR auszuführen. In diesem Beispiel wird eine Azure Container Apps-Instanz namens youracainstancename erstellt.
export ACA_NAME=youracainstancename
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
--environment $ACA_ENV \
--registry-server $ACR_LOGIN_SERVER \
--registry-username $ACR_USER_NAME \
--registry-password $ACR_PASSWORD \
--target-port 9080 \
--env-vars \
DB_SERVER_NAME=${DB_SERVER_NAME} \
DB_NAME=${DB_NAME} \
DB_USER=${DB_USER} \
DB_PASSWORD=${DB_PASSWORD} \
--ingress 'external'
Die erfolgreiche Ausgabe ist ein JSON-Objekt, einschließlich der Eigenschaft "type": "Microsoft.App/containerApps"
.
Testen der Anwendung
Verwenden Sie den folgenden Befehl, um eine vollqualifizierte URL für den Zugriff auf die Anwendung abzurufen:
echo https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn \
--output tsv)
Öffnen Sie einen Webbrowser mit der URL, um auf die Anwendung zuzugreifen und sie zu testen. Der folgende Screenshot zeigt die ausgeführte Anwendung an:
Bereinigen von Ressourcen
Zum Vermeiden von Azure-Gebühren sollten Sie nicht benötigte Ressourcen bereinigen. Wenn der Cluster nicht mehr benötigt wird, entfernen Sie mit dem Befehl az group delete die Ressourcengruppe, die Containerregistrierung, die Container-Apps und alle zugehörigen Ressourcen.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP --yes --no-wait
Verwenden Sie dann den folgenden Befehl, um das Containerimage von Ihrem lokalen Docker-Server zu entfernen:
docker rmi -f ${ACR_LOGIN_SERVER}/javaee-cafe:v1
Nächste Schritte
Weitere Informationen finden Sie über die in diesem Handbuch verwendeten Verweise:
- Azure Container Apps
- Open Liberty
- Open Liberty-Serverkonfiguration
- Liberty Maven-Plug-In
- Open Liberty-Containerimages
- WebSphere Liberty-Containerimages
Informationen zu Optionen zum Ausführen von WebSphere-Produkten auf Azure finden Sie unter Welche Lösungen gibt es zum Ausführen der WebSphere-Produktfamilie auf Azure?