Поделиться через


Развертывание приложения Java с помощью Open Liberty или WebSphere Liberty в приложениях контейнеров Azure

В этой статье показано, как запустить Open Liberty или WebSphere Liberty в приложениях контейнеров Azure. В этой статье выполняются следующие действия:

  • Запуск приложения Java, Java EE, Jakarta EE или MicroProfile в среде выполнения Open Liberty или WebSphere Liberty.
  • Создайте образ Docker приложения с помощью образов контейнеров Liberty.
  • Разверните контейнерное приложение в приложениях контейнеров Azure.

Дополнительные сведения об Open Liberty см. на странице проекта Open Liberty. Дополнительные сведения об IBM WebSphere Liberty см. на странице продукта WebSphere Liberty.

Эта статья предназначена для быстрого развертывания. Прежде чем перейти к производству, вы должны исследовать Настройка Свободы.

Если вы заинтересованы в предоставлении отзывов или тесной работе с сценариями миграции с помощью группы разработчиков, разрабатывающей веб-sphere в решениях Azure, заполните этот короткий опрос по миграции WebSphere и включите контактные данные. Команда руководителей программ, архитекторов и инженеров будет быстро связаться с вами, чтобы начать тесное сотрудничество.

Необходимые компоненты

  • Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.
  • Подготовьте локальный компьютер с установленной операционной системой Windows или Unix, например Ubuntu, macOS или подсистема Windows для Linux.
  • Установите Azure CLI 2.53.0 или более поздней версии, чтобы выполнить команды Azure CLI.
  • Установите реализацию Java SE версии 17 или более поздней версии, например сборку OpenJDK майкрософт.
  • Установите Maven 3.5.0 или более поздней версии.
  • Установите Docker для своей операционной системы.
  • Убедитесь, что установлен Git .

Вход в Azure

Если вы еще этого не сделали, войдите в подписку Azure с помощью команды az login и следуйте инструкциям на экране.

az login

Примечание.

Большинство команд Azure CLI можно выполнять в PowerShell так же, как и в Bash. Разница существует только при использовании переменных. В следующих разделах разница рассматривается на разных вкладках при необходимости.

Если у вас несколько клиентов Azure, связанных с учетными данными Azure, необходимо указать, в какой клиент вы хотите войти. Это можно сделать с --tenant помощью параметра , например az login --tenant contoso.onmicrosoft.com.

Если у вас есть несколько подписок в одном клиенте, убедитесь, что вы выполнили вход с помощью того, который вы планируете использовать az account set --subscription <subscription-id>.

Создание или изменение группы ресурсов

Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure.

Создайте группу ресурсов java-liberty-project в расположении eastus с помощью команды az group create. Эта группа ресурсов используется позже для создания экземпляра Реестр контейнеров Azure (ACR) и экземпляра приложений контейнеров Azure.

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

Создание экземпляра ACR

Создайте экземпляр ACR с помощью команды az acr create. В следующем примере создается экземпляр ACR с именем youruniqueacrname. Убедитесь, что имя youruniqueacrname является уникальным в Azure.

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 необходимо войти в экземпляр 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 Container Apps создает безопасную границу вокруг группы приложений-контейнеров. Развертываемые в одной среде приложения-контейнеры развертываются в одной виртуальной сети и записывают журналы в одну рабочую область 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",

Создание базы данных SQL Azure

В этом разделе вы создадите База данных SQL Azure отдельную базу данных для использования с приложением.

Создайте одну базу данных в База данных SQL Azure, выполнив действия Azure CLI в кратком руководстве. Создание одной базы данных — База данных SQL Azure. Выполните шаги до, но не включая запрос к базе данных. Выполните следующие действия, как описано в статье, а затем вернитесь к этому документу после создания и настройки сервера базы данных:

Когда вы достигнете раздела "Задать значения параметров" краткого руководства, выходные данные и сохраните значения переменных в примере кода, в Variable blockтом числеserverresourceGroupdatabase , , loginи .password Определите следующие переменные среды после замены <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. Правила брандмауэра можно найти и настроить на вкладке "Сеть" и на вкладке "Общедоступный доступ".

    Снимок экрана: правила брандмауэра — разрешение доступа к клиенту.

Настройка и сборка образа приложения

Чтобы развернуть и запустить приложение Liberty в приложениях контейнеров Azure, контейнеризируйте приложение как образ Docker с помощью образов контейнеров Open Liberty или образов контейнеров WebSphere Liberty.

Выполните действия, описанные в этом разделе, чтобы развернуть пример приложения в среде выполнения 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

Каталоги java, java и webapp содержат исходный код примера приложения. В коде объявлен и используется источник данных с именем jdbc/JavaEECafeDB.

В корневом каталоге java-app есть два файла для создания образа приложения с помощью Open Liberty или WebSphere Liberty.

В каталоге liberty/config файл server.xml используется для настройки подключения базы данных для кластера Open Liberty и WebSphere Liberty.

Сборка проекта

Запустите сборку приложения с помощью следующей команды.

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

Примечание.

Если выбрано развертывание базы данных без сервера, убедитесь, что база данных SQL не вошла в режим приостановки. Одним из способов этого является вход в редактор запросов базы данных, как описано в кратком руководстве. Используйте редактор запросов портал Azure (предварительная версия) для запроса База данных SQL Azure.

  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, чтобы остановиться.

Создание образа

Теперь можно выполнить 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

Используйте следующие команды, чтобы создать экземпляр Azure Container Apps для запуска приложения после извлечения образа из ACR. В этом примере создается экземпляр приложений контейнеров Azure с именем 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'

Успешные выходные данные — это объект JSON, включая свойство "type": "Microsoft.App/containerApps".

Тестирование приложения

Чтобы получить полный URL-адрес для доступа к приложению, используйте следующую команду:

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

Откройте веб-браузер для доступа к URL-адресу и протестируйте приложение. На следующем снимка экрана показано работающее приложение:

Снимок экрана: приложение свободы Java успешно развернуто в приложениях контейнеров Azure.

Очистка ресурсов

Чтобы избежать расходов за использование 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

Следующие шаги

Дополнительные сведения о ссылках, используемых в этом руководстве, см. в следующем руководстве.

Сведения о возможностях запуска продуктов WebSphere в Azure см. в статье "Что такое решения для запуска семейства продуктов WebSphere в Azure?"