將 Quarkus 應用程式部署至 Azure 容器應用程式
在此單元中,您會使用 Azure CLI 建立 Azure Container Apps 環境。
設定 Quarkus 應用程式的 Dockerfile
Container Apps 可用來部署容器化應用程式。 因此,您必須先將 Quarkus 應用程式容器化為 Docker 映射。 此程式很簡單,因為 Quarkus Maven 外掛程式已在 src/main/docker下產生一些 Dockerfiles。
使用此命令將其中一個 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 位於正確的位置,您可以建立 Container Apps 環境,並使用單一 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 映射部署至 Container Apps 環境
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 入口網站上搜尋您的資源群組。 您應該會看到類似下列的資源:
您也可以執行下列命令來檢查部署。 它會列出 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
確認已部署的應用程式
您現在可以驗證已部署的應用程式。 首先,您需要取得應用程式的 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
這個指令會傳回資料庫中所有 to-do 項目的清單:
[
{
"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
}
]
如果您執行此命令,您可以在建立新的 to-dos 時串流容器的記錄:
az containerapp logs show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--follow
執行更多 cURL 命令。 您應該會在終端機中看到記錄卷動。
curl https://$AZ_APP_URL/api/todos
備註
您也可以在網頁瀏覽器中開啟 URL 以傳回待辦事項清單。