Развертывание приложения Quarkus в приложениях контейнеров Azure

Завершено

В этом уроке вы создадите среду приложений контейнеров Azure с помощью Azure CLI.

Настройка Dockerfile для приложения Quarkus

Container Apps используется для развертывания контейнеризированных приложений. Поэтому сначала необходимо контейнеризировать приложение Quarkus в образ Docker. Этот процесс прост, так как плагин Quarkus Maven уже создал некоторые файлы Docker в src/main/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-файл и создает файл quarkus-run.jar в папке target/quarkus-app .

Создание среды "Приложения контейнеров" и развертывание контейнера

Теперь, когда 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 . Вы должны увидеть ресурсы, аналогичные следующим:

Снимок экрана: развернутое приложение.

Вы также можете проверить развертывание, выполнив следующую команду. В нем перечислены все ресурсы, созданные командой 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
   }
]

При выполнении этой команды можно просматривать журналы для контейнера при создании новых задач.

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

Выполните дополнительные команды cURL. Вы увидите журналы, прокручивающиеся в терминале.

curl https://$AZ_APP_URL/api/todos

Заметка

Вы также можете открыть URL-адрес в веб-браузере, чтобы вернуть список to-do элементов.