將 Quarkus 應用程式部署至 Azure 容器應用程式

已完成

在本單元中,您已使用 Azure CLI 建立 Azure 容器應用程式環境。

設定 Quarkus 應用程式的 Dockerfile

容器化應用程式可用於部署容器化應用程式。 因此,您首先需要將 Quarkus 應用程式容器化為 Docker 映像。 此程序很簡單,因為 Quarkus Maven 外掛程式已在 src/main/docker 之下產生一些 Docker 檔案。

使用此命令將其中一個 Dockerfiles Dockerfile.jvm 重新命名為 Dockerfile,並將之移至根資料夾:

mv src/main/docker/Dockerfile.jvm ./Dockerfile

以下列內容取代 Dockerfile 中長註解之後的內容:

FROM registry.access.redhat.com/ubi8/openjdk-17:1.18

ENV LANGUAGE='en_US:en'


# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"

ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]

此 Dockerfile 預期 Quarkus 應用程式會封裝為 quarkus-run.jar 檔案。 此名稱是將 Quarkus 應用程式封裝為 JAR 檔案時的預設名稱。 您需要確定 Quarkus 應用程式已封裝為 JAR 檔案。 若要這樣做,請執行下列 Maven 命令:

./mvnw package    # On Mac or Linux
mvnw.cmd package  # On Windows

此命令會將 Quarkus 應用程式封裝成 JAR 檔案,並在 target/quarkus-app 資料夾中產生 quarkus-run.jar 檔案。

建立容器應用程式環境並部署容器

既然 Dockerfile 已位於適當位置,您可以建立容器應用程式環境,並使用單一 Azure CLI 命令來部署容器。 從專案根目錄中,執行下列命令:

az containerapp up \
    --name "$AZ_CONTAINERAPP" \
    --environment "$AZ_CONTAINERAPP_ENV" \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --ingress external \
    --target-port 8080 \
    --source .

此命令可執行多個工作:

  • 建立容器應用程式環境 (若其不存在)
  • 建立 Azure 登錄 (若其不存在)
  • 建立 Log Analytics 工作區 (若其不存在)
  • 建置 Docker 映像並將之推送至 Azure 登錄
  • 將 Docker 映像部署至容器應用程式環境

az containerapp up 命令需要一些時間執行。 您應該會看到類似下列內容的輸出:

Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus

Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"

Your container app caazure-deploy-quarkus has been created and deployed! Congrats! 

驗證部署

您可以透過數種方式來驗證部署是否成功。 最簡單的方法是在 Azure 入口網站 上搜尋您的資源群組。 您應該會看到如下的資源:

Screenshot that shows the deployed application.

您也可以執行下列命令來檢查部署。 它會列出 az containerapp up 命令所建立的所有資源。

az resource list \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

您應該會看到類似此內容的輸出:

Name                                ResourceGroup           Location    Type                                       Status
----------------------------------  ----------------------  ----------  -----------------------------------------  --------
caea3a6e0afeacr                     rgazure-deploy-quarkus  eastus      Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus            rgazure-deploy-quarkus  eastus      Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus              rgazure-deploy-quarkus  eastus      Microsoft.App/containerApps
caeazure-deploy-quarkus             rgazure-deploy-quarkus  eastus      Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3  rgazure-deploy-quarkus  eastus      Microsoft.OperationalInsights/workspaces

執行已部署的 Quarkus 應用程式

您現在可以執行已部署的 Quarkus 應用程式。 首先,您需要取得應用程式的 URL。 執行下列命令即可取得該 URL:

export AZ_APP_URL=$(
    az containerapp show \
        --name "$AZ_CONTAINERAPP" \
        --resource-group "$AZ_RESOURCE_GROUP" \
        --query "properties.configuration.ingress.fqdn" \
        --output tsv \
)

echo "AZ_APP_URL=$AZ_APP_URL"

您的應用程式已經位於 https://<app-name>.azurecontainerapps.io/。 請注意 https 通訊協定。 系統會使用該通訊協定,因為應用程式是以 TLS 憑證部署。 您可使用 cURL 以測試應用程式:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
    https://$AZ_APP_URL/api/todos

使用新的 cURL 要求以擷取資料:

curl https://$AZ_APP_URL/api/todos

此命令會從資料庫傳回所有待辦事項的清單:

[
   {
      "description" : "Take Quarkus MS Learn",
      "details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
      "done" : true,
      "id" : 1
   },
   {
      "description" : "Take Azure Container MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   },
   {
      "description" : "Configuration",
      "details" : "Congratulations, you have set up your Quarkus application correctly!",
      "done" : true,
      "id" : 3
   }
]

如果您執行此命令,您可以在建立新的待辦事項時,串流容器的記錄:

az containerapp logs show \
    --name "$AZ_CONTAINERAPP" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --follow

執行其他 cURL 命令。 您應該會看到記錄在終端機中捲動。

curl https://$AZ_APP_URL/api/todos

注意

您也可以在網頁瀏覽器中開啟 URL 以傳回待辦事項清單。