在 Azure Container Apps 上使用 Open Liberty 或 WebSphere Liberty 部署 Java 應用程式

本文說明如何在 Azure Container Apps 上執行 Open Liberty 或 WebSphere Liberty。 您會在本文中執行下列活動:

  • 在 Open Liberty 或 WebSphere Liberty 執行階段上執行 JAVA、JAVE EE、Jakarta EE 或 MicroProfile 應用程式。
  • 使用 Liberty 容器映射建置應用程式 Docker 映射。
  • 將容器化應用程式部署至 Azure Container Apps。

如需 Open Liberty 的詳細資訊,請參閱 Open Liberty 專案頁面 (英文)。 如需 IBM WebSphere Liberty 的詳細資訊,請參閱 WebSphere Liberty 產品頁面 (英文)

本文旨在協助您快速進行部署。 移至實際執行環境之前,您應該先探索微調 Liberty (英文)。

如果您有興趣提供意見反應,或與工程小組密切合作,開發 Azure 解決方案上的 WebSphere 解決方案,請填寫此關於 WebSphere 移轉的簡短問卷,並包含您的連絡資訊。 項目經理、架構設計人員和工程師小組會立即與您取得聯繫,以起始密切的合作。

必要條件

如果您是在本機執行本指南中的命令(而不是 Azure Cloud Shell):

  • 準備已安裝 Windows 或 Linux 的本機電腦。
  • 安裝 Java SE 實作,版本 17 或更新版本(例如 Eclipse Open J9)。
  • 安裝 Maven 3.5.0 或更新版本。
  • 安裝適用於作業系統的 Docker

備妥環境以使用 Azure CLI

  • 本文至少需要 Azure CLI 2.53.0 版。 若您使用的是 Azure Cloud Shell,即已安裝最新版本。 您可以在本機或 Azure Cloud Shell 中啟動 Bash 或 Azure PowerShell 中的 Azure CLI 命令。

登入 Azure

如果您尚未這麼做,請使用 az login 命令登入您的 Azure 訂用帳戶,並遵循螢幕上的指示。

az login

注意

您可以在 PowerShell 中執行大部分的 Azure CLI 命令,與 Bash 中的命令相同。 只有在使用變數時,差異才會存在。 在下列各節中,差異會在需要時在不同的索引卷標中解決。

如果您有多個與 Azure 認證相關聯的 Azure 租使用者,您必須指定您要登入的租使用者。 您可以使用 選項來執行這項 --tenant 操作,例如 az login --tenant contoso.onmicrosoft.com

如果您在單一租用戶內有多個訂用帳戶,請確定您已使用 想要使用 az account set --subscription <subscription-id>的訂用帳戶登入。

建立資源群組

Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。

使用 eastus 位置中的 az group create 命令,建立名為 java-liberty-project 的資源群組。 此資源群組稍後會用於建立 Azure Container Registry (ACR) 實例和 Azure Container Apps 實例。

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

建立 ACR 執行個體

使用 az acr create 命令建立 ACR 執行個體。 下列範例會建立名為 youruniqueacrname 的 ACR 實例。 請確定在 Azure 中 youruniqueacrname 是唯一的。

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

在短時間內,您應該會看到包含下列幾行的 JSON 輸出:

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

聯機到 ACR 實例

您必須先登入 ACR 實例,才能將映像推送至該實例。 如果您選擇在本機執行命令,請確定 Docker 精靈正在執行,並執行下列命令來驗證連線:

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

如果您已成功登入 ACR 實體,您應該會在命令輸出結尾看到 Login Succeeded

建立環境

Azure 容器應用程式中的環境會在容器應用程式群組周圍建立安全界限。 部署至相同環境的容器應用程式會部署在相同的虛擬網路中,並將記錄寫入相同的 Log Analytics 工作區。 使用 az containerapp env create 命令來建立環境。 下列範例會建立名為 youracaenvname 的環境:

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

如果系統要求您安裝擴充功能,請回答 Y

在短時間內,您應該會看到包含下列幾行的 JSON 輸出:

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

建立 Azure SQL Database

在本節中,您會建立 Azure SQL 資料庫 單一資料庫,以搭配您的應用程式使用。

遵循快速入門:建立 Azure SQL 資料庫 單一資料庫中的 Azure CLI 步驟,在 Azure SQL 資料庫 中建立單一資料庫。 執行步驟,但不包括 查詢資料庫。 當您瀏覽本文時,請使用下列步驟,然後在建立及設定資料庫伺服器之後返回此檔:

當您到達快速入門的 Set 參數值區段時,請將變數的值輸出並儲存在標示Variable block為 、resourceGroupserverdatabaseloginpassword的程式代碼範例中。 在以這些值取代佔位元 <resourceGroup><server>、、 <database><login><password> 之後,定義下列環境變數。

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>

如果您想要稍後在本機測試應用程式,請使用下列步驟來確保允許用戶端 IPv4 位址連線:

  1. 在入口網站中,搜尋並選取 [SQL 資料庫],然後從清單中選取您的資料庫。

  2. 選取 [概觀]

  3. 確定頁面中間已選取 [開始使用] 索引標籤。

  4. 在 [設定存取權] 底下,選取 [設定]。

  5. 選取 [ 新增用戶端 IPv4 位址]。

  6. 選取 [儲存]。

  7. 您可以在 [網络] 窗格和 [公用存取] 索引卷標中找到並設定防火牆規則

    防火牆規則的螢幕快照 - 允許用戶端存取。

設定和建置應用程式映像

若要在 Azure Container Apps 上部署和執行您的 Liberty 應用程式,請使用 Open Liberty 容器映射或 WebSphere Liberty 容器映像,將您的應用程式容器化為 Docker 映射。

請依照本節的步驟,在 Liberty 執行階段上部署應用程式範例。 這些步驟會使用 Maven。

查看應用程式

使用下列命令來準備本指南的範例程序代碼。 此範例位於 GitHub 上。

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

如果您看到有關處於狀態的 detached HEAD 訊息,則此訊息是安全的忽略。 那只是表示您已簽出標籤。

本文使用 java-app。 以下是應用程式的檔案結構:

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

javaresourceswebapp 目錄包含應用程式範例的原始程式碼。 程式碼會宣告並使用名為 jdbc/JavaEECafeDB 的資料來源。

java 應用程式 根目錄中,有兩個檔案可透過 Open Liberty 或 WebSphere Liberty 來建立應用程式映像。

liberty/config 目錄中,server.xml 檔案是用於設定 Open Liberty 和 WebSphere Liberty 叢集的 DB 連線。

建置專案

使用下列命令建置應用程式:

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

如果建置成功,您應該會在組建結尾看到類似下列的輸出。

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

如果您看不到此輸出,則請先進行疑難排解並解決問題,再繼續進行。

(選擇性) 在本機測試您的專案

您現在可以使用下列步驟在本機執行和測試專案,再部署至 Azure。 為了方便起見,請使用 liberty-maven-plugin。 若要深入了解 liberty-maven-plugin,請參閱使用 Maven 建置 Web 應用程式。 針對您的應用程式,您可以使用任何其他機制 (例如,您的本機 IDE) 來執行類似的作業。

注意

如果您選取了「無伺服器」資料庫部署,請確認您的 SQL 資料庫尚未進入暫停模式。 其中一種方法是登入資料庫查詢編輯器,如快速入門:使用 Azure 入口網站 查詢編輯器 (預覽) 查詢 Azure SQL 資料庫 中所述。

  1. 使用 liberty:run 啟動應用程式。 liberty:run 會使用上一個步驟中定義的資料庫相關環境變數。

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. 確認應用程式如預期運作。 如果成功,您應該會在命令輸出中看到類似 [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. 的訊息。 在瀏覽器中移至 http://localhost:9080/ ,確認應用程式可供存取,且所有函式都正常運作。

  3. Ctrl+C 來停止。

建置映像

注意

如果您選擇在 Azure Cloud Shell 中使用 Bash 環境,請使用 az acr build 命令從 Docker 檔案建置和推送映像。 如需詳細資訊,請參閱快速入門:使用 Azure Container Registry 工作建置和執行容器映像的 Dockerfile 一節。 之後,直接移至 [ 將應用程式部署至 Azure Container Apps ] 區段。 如果您選擇在本機執行命令,請使用下列指引。

您現在可以執行 docker buildx build 命令來建置映像,如下列範例所示:

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 .

(選擇性) 在本機測試 Docker 映像

您現在可以使用下列步驟在本機測試 Docker 映射,再部署至 Azure:

  1. 使用下列命令來執行映像。 此命令會使用先前定義的資料庫相關環境變數。

    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. 容器啟動之後,請移至 http://localhost:9080/ 瀏覽器中以存取應用程式。

  3. Ctrl+C 來停止。

將映像上傳至 ACR

接下來,將建置映射上傳至您在先前步驟中建立的 ACR。

如果您尚未這麼做,請使用下列命令登入 ACR:

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

使用下列命令來標記和推送容器映像:

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

將應用程式部署至 Azure Container Apps

使用下列命令建立 Azure Container Apps 實例,以在從 ACR 提取映射之後執行應用程式。 此範例會建立名為 youracainstancename 的 Azure Container Apps 實例。

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'

成功的輸出是 JSON 物件,包括 屬性 "type": "Microsoft.App/containerApps"

測試應用程式

使用下列命令取得完整網址以存取應用程式:

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

開啟網頁瀏覽器至 URL 以存取及測試應用程式。 下列螢幕快照顯示執行中的應用程式:

此螢幕快照顯示已成功部署在 Azure Container Apps 上的 Java 自由應用程式。

清除資源

若要避免 Azure 費用,您應該清除不必要的資源。 不再需要叢集時,請使用 az group delete 命令來移除資源群組、容器登錄、容器應用程式、資料庫伺服器和所有相關資源。

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

然後,使用下列命令,從本機 Docker 伺服器移除容器映射:

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

下一步

您可以從本指南中使用的參考深入瞭解:

若要探索在 Azure 上執行 WebSphere 產品的選項,請參閱 在 Azure 上執行 WebSphere 產品系列的解決方案為何?