Dela via


Distribuera ett Java-program med Open Liberty eller WebSphere Liberty i Azure Container Apps

Den här artikeln visar hur du kör Open Liberty eller WebSphere Liberty i Azure Container Apps. Du utför följande aktiviteter i den här artikeln:

  • Kör ditt Java-, Java EE-, Jakarta EE- eller MicroProfile-program på Open Liberty- eller WebSphere Liberty-körningen.
  • Skapa docker-avbildningen för programmet med hjälp av Liberty-containeravbildningar.
  • Distribuera det containerbaserade programmet till Azure Container Apps.

Mer information om Open Liberty finns på open liberty-projektsidan. Mer information om IBM WebSphere Liberty finns på produktsidan för WebSphere Liberty.

Den här artikeln är avsedd att hjälpa dig att snabbt komma till distributionen. Innan du går till produktion bör du utforska Tuning Liberty.

Om du är intresserad av att ge feedback eller arbeta nära dina migreringsscenarier med teknikteamet som utvecklar WebSphere på Azure-lösningar kan du fylla i den här korta undersökningen om WebSphere-migrering och inkludera din kontaktinformation. Teamet med programchefer, arkitekter och ingenjörer kommer snabbt att kontakta dig för att initiera ett nära samarbete.

Förutsättningar

  • En Azure-prenumeration. Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.
  • Förbered en lokal dator med antingen Windows- eller Unix-liknande operativsystem installerat , till exempel Ubuntu, macOS eller Windows podsistem za Linux.
  • Installera Azure CLI 2.53.0 eller senare för att köra Azure CLI-kommandon.
    • Logga in med Azure CLI med kommandot az login . Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Se Logga in på Azure med Azure CLI för andra inloggningsalternativ.
    • När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
    • Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
  • Installera en Java SE-implementeringsversion 17 eller senare – till exempel Microsoft-version av OpenJDK.
  • Installera Maven 3.5.0 eller senare.
  • Installera Docker för operativsystemet.
  • Kontrollera att Git är installerat.

Logga in på Azure

Om du inte redan har gjort det loggar du in på din Azure-prenumeration med kommandot az login och följer anvisningarna på skärmen.

az login

Kommentar

Du kan köra de flesta Azure CLI-kommandon i PowerShell på samma sätt som i Bash. Skillnaden finns bara när du använder variabler. I följande avsnitt åtgärdas skillnaden på olika flikar när det behövs.

Om du har flera Azure-klienter associerade med dina Azure-autentiseringsuppgifter måste du ange vilken klientorganisation du vill logga in på. Du kan göra detta med alternativet --tenant , till exempel az login --tenant contoso.onmicrosoft.com.

Om du har flera prenumerationer i en enda klientorganisation kontrollerar du att du är inloggad med den som du tänker använda med hjälp az account set --subscription <subscription-id>av .

Skapa en resursgrupp

En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras.

Skapa en resursgrupp med namnet java-liberty-project med kommandot az group create på platsen eastus . Den här resursgruppen används senare för att skapa Azure Container Registry-instansen (ACR) och Azure Container Apps-instansen.

export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus

Skapa en ACR-instans

Använd kommandot az acr create för att skapa ACR-instansen. I följande exempel skapas en ACR-instans med namnet youruniqueacrname. Kontrollera att dittuniqueacrname är unikt i Azure.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Efter en kort tid bör du se en JSON-utdata som innehåller följande rader:

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "java-liberty-project",

Ansluta till ACR-instansen

Du måste logga in på ACR-instansen innan du kan skicka en bild till den. Om du väljer att köra kommandon lokalt kontrollerar du att docker-daemonen körs och kör följande kommandon för att verifiera anslutningen:

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

Du bör se Login Succeeded i slutet av kommandoutdata om du har loggat in på ACR-instansen.

Skapa en miljö

En miljö i Azure Container Apps skapar en säker gräns runt en grupp med containerappar. Container Apps som distribueras till samma miljö distribueras i samma virtuella nätverk och skriver loggar till samma Log Analytics-arbetsyta. Använd kommandot az containerapp env create för att skapa en miljö. I följande exempel skapas en miljö med namnet youracaenvname:

export ACA_ENV=youracaenvname
az containerapp env create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location eastus \
    --name $ACA_ENV

Om du uppmanas att installera ett tillägg svarar du Y.

Efter en kort tid bör du se en JSON-utdata som innehåller följande rader:

  "provisioningState": "Succeeded",
  "type": "Microsoft.App/managedEnvironments"
  "resourceGroup": "java-liberty-project",

Skapa en Azure SQL Database

I det här avsnittet skapar du en enkel Azure SQL Database-databas för användning med din app.

Skapa en enkel databas i Azure SQL Database genom att följa Azure CLI-stegen i Snabbstart: Skapa en enkel databas – Azure SQL Database. Kör stegen upp till, men inkludera inte Fråga databasen. Följ stegen nedan när du går igenom artikeln och gå sedan tillbaka till det här dokumentet när du har skapat och konfigurerat databasservern:

När du når avsnittet Ange parametervärden i snabbstarten matar du ut och sparar värdena för variabler i kodexemplet Variable blockmärkt , inklusive resourceGroup,server, database, loginoch password. Definiera följande miljövariabler när du har ersatt platshållarna <resourceGroup>,<server>, <database>, <login>och <password> med dessa värden.

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>

Om du vill testa programmet lokalt senare använder du följande steg för att se till att klientens IPv4-adress tillåts ansluta:

  1. I portalen söker du efter och väljer SQL-databaser och väljer sedan databasen i listan.

  2. Välj Översikt.

  3. Kontrollera att fliken Komma igång är markerad mitt på sidan.

  4. Under Konfigurera åtkomst väljer du Konfigurera.

  5. Välj Lägg till din klient-IPv4-adress.

  6. Välj Spara.

  7. Du kan hitta och konfigurera brandväggsregler i fönstret Nätverk och fliken Offentlig åtkomst .

    Skärmbild av brandväggsregler – tillåt klientåtkomst.

Konfigurera och skapa programbilden

Om du vill distribuera och köra ditt Liberty-program i Azure Container Apps kan du containerisera ditt program som en Docker-avbildning med hjälp av Open Liberty-containeravbildningar eller WebSphere Liberty-containeravbildningar.

Följ stegen i det här avsnittet för att distribuera exempelprogrammet på Liberty-körningen. De här stegen använder Maven.

Kolla in programmet

Använd följande kommandon för att förbereda exempelkoden för den här guiden. Exemplet finns på GitHub.

git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
git checkout 20231026

Om du ser ett meddelande om att vara i detached HEAD tillstånd är det här meddelandet säkert att ignorera. Det betyder bara att du har checkat ut en tagg.

Den här artikeln använder java-app. Här är programmets filstruktur:

java-app
├─ src/main/
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml

Katalogerna java, resources och webapp innehåller källkoden för exempelprogrammet. Koden deklarerar och använder en datakälla med namnet jdbc/JavaEECafeDB.

I java-app-rotkatalogen finns det två filer för att skapa programbilden med antingen Open Liberty eller WebSphere Liberty.

I katalogen liberty/config används server.xml-filen för att konfigurera DB-anslutningen för Open Liberty- och WebSphere Liberty-klustret.

Bygga projektet

Använd följande kommando för att skapa programmet:

cd <path-to-your-repo>/java-app
mvn clean install

Om bygget lyckas bör du se utdata som liknar följande i slutet av bygget.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------

Om du inte ser dessa utdata kan du felsöka och lösa problemet innan du fortsätter.

(Valfritt) Testa projektet lokalt

Du kan nu använda följande steg för att köra och testa projektet lokalt innan du distribuerar till Azure. För enkelhetens skull använder du liberty-maven-plugin. Mer information om finns i liberty-maven-pluginSkapa ett webbprogram med Maven. För ditt program kan du göra något liknande med någon annan mekanism, till exempel din lokala IDE.

Kommentar

Om du har valt en "serverlös" databasdistribution kontrollerar du att SQL-databasen inte har angett pausläge. Ett sätt att göra detta är att logga in på databasfrågeredigeraren enligt beskrivningen i Snabbstart: Använd Azure-portalens frågeredigerare (förhandsversion) för att fråga Azure SQL Database.

  1. Starta programmet med .liberty:run liberty:run använder databasrelaterade miljövariabler som definierades i föregående steg.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Kontrollera att programmet fungerar som förväntat. Du bör se ett meddelande som liknar [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. i kommandoutdata om det lyckas. Gå till http://localhost:9080/ i webbläsaren för att kontrollera att programmet är tillgängligt och att alla funktioner fungerar.

  3. Tryck på Ctrl+C för att stoppa.

Skapa avbildningen

Du kan nu köra docker buildx build kommandot för att skapa avbildningen, som du ser i följande exempel:

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 .

(Valfritt) Testa Docker-avbildningen lokalt

Du kan nu använda följande steg för att testa Docker-avbildningen lokalt innan du distribuerar till Azure:

  1. Kör avbildningen med hjälp av följande kommando. Det här kommandot använder databasrelaterade miljövariabler som definierats tidigare.

    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
    
  2. När containern har startat går du till http://localhost:9080/ i webbläsaren för att komma åt programmet.

  3. Tryck på Ctrl+C för att stoppa.

Ladda upp avbildningen till ACR

Ladda sedan upp den skapade avbildningen till den ACR som du skapade i föregående steg.

Om du inte redan har gjort det använder du följande kommando för att logga in på ACR:

docker login -u ${ACR_USER_NAME} -p ${ACR_PASSWORD} ${ACR_LOGIN_SERVER}

Använd följande kommandon för att tagga och push-överföra containeravbildningen:

docker tag javaee-cafe:v1 ${ACR_LOGIN_SERVER}/javaee-cafe:v1
docker push ${ACR_LOGIN_SERVER}/javaee-cafe:v1

Distribuera programmet till Azure Container Apps

Använd följande kommandon för att skapa en Azure Container Apps-instans för att köra appen när du har hämtat avbildningen från ACR. Det här exemplet skapar en Azure Container Apps-instans med namnet youracainstancename.

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'

Lyckade utdata är ett JSON-objekt inklusive egenskapen "type": "Microsoft.App/containerApps".

Testa programmet

Använd följande kommando för att hämta en fullständigt kvalificerad URL för att få åtkomst till programmet:

echo https://$(az containerapp show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --query properties.configuration.ingress.fqdn \
    --output tsv)

Öppna en webbläsare till URL:en för att komma åt och testa programmet. Följande skärmbild visar det program som körs:

Skärmbild som visar att Java Liberty-programmet har distribuerats i Azure Container Apps.

Rensa resurser

För att undvika Azure-avgifter bör du rensa onödiga resurser. När klustret inte längre behövs använder du kommandot az group delete för att ta bort resursgruppen, containerregistret, containerappar, databasservern och alla relaterade resurser.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP --yes --no-wait

Använd sedan följande kommando för att ta bort containeravbildningen från din lokala Docker-server:

docker rmi -f ${ACR_LOGIN_SERVER}/javaee-cafe:v1

Nästa steg

Du kan lära dig mer från de referenser som används i den här guiden:

Information om alternativ för att köra WebSphere-produkter i Azure finns i Vad är lösningar för att köra WebSphere-serien med produkter i Azure?