Развертывание приложения Java с помощью Quarkus в кластере Служба Azure Kubernetes
В этой статье показано, как быстро развернуть Red Hat Quarkus на Служба Azure Kubernetes (AKS) с простым приложением CRUD. Приложение — это список действий с интерфейсом JavaScript и конечной точкой REST. База данных Azure для PostgreSQL предоставляет уровень сохраняемости для приложения. В статье показано, как протестировать приложение локально и развернуть его в AKS.
Необходимые компоненты
- Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Azure Cloud Shell имеет все эти предварительные требования. Дополнительные сведения см . в кратком руководстве по Azure Cloud Shell.
- Если вы выполняете команды в этом руководстве локально (вместо использования Azure Cloud Shell), выполните следующие действия:
- Подготовьте локальный компьютер с установленной операционной системой Unix (например, Ubuntu, macOS или подсистема Windows для Linux).
- Установите реализацию Java SE (например, сборка Microsoft OpenJDK).
- Установите Maven 3.5.0 или более поздней версии.
- Установите Docker или Podman для операционной системы.
- Установите jq.
- Установите cURL.
- Установите cli Quarkus.
- Azure CLI для сред, таких как Unix. В этой статье требуется только вариант Azure CLI Bash.
Разработчик должен установить Azure CLI и войти в интерактивном режиме с помощью команды az login , чтобы войти в Azure, прежде чем использовать DefaultAzureCredential в коде. az login
- Для этой статьи требуется Azure CLI версии не ниже 2.31.0. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
Создание проекта приложения
Используйте следующую команду, чтобы клонировать пример проекта Java для этой статьи. Пример размещен на сайте GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-07-17
cd aks-quarkus
Если появится сообщение об отключенном состоянии HEAD , это сообщение безопасно игнорировать. Так как в этой статье нет фиксаций, отсоединяемое состояние HEAD подходит.
Тестирование приложения Quarkus локально
В этом разделе показано, как локально запустить приложение.
Quarkus поддерживает автоматическую подготовку ненастроенных служб в режиме разработки и тестирования. Quarkus ссылается на эту возможность как службы разработки. Предположим, вы включаете функцию Quarkus, например подключение к службе базы данных. Вы хотите протестировать приложение, но еще не полностью настроили подключение к реальной базе данных. Quarkus автоматически запускает версию заглушки соответствующей службы и подключает приложение к нему. Дополнительные сведения см. в разделе "Общие сведения о службах разработки" в документации по Quarkus.
Убедитесь, что среда контейнера Docker или Podman выполняется и использует следующую команду, чтобы ввести режим разработки Quarkus:
quarkus dev
Вместо этого quarkus dev
можно выполнить то же самое с Помощью Maven mvn quarkus:dev
.
Вам может быть предложено отправить данные телеметрии использования режима разработки Quarkus. Если да, ответьте, как вам нравится.
Режим разработки Quarkus обеспечивает динамическую перезагрузку с фоновой компиляцией. Если изменить любой аспект исходного кода приложения и обновить браузер, вы увидите изменения. Если возникают проблемы с компиляцией или развертыванием, вы ознакаете сообщение об ошибке. Режим разработки Quarkus прослушивает отладчик через порт 5005. Если вы хотите дождаться подключения отладчика перед выполнением, перед -Dsuspend
выполнением Если отладчик вообще не нужен, можно использовать -Ddebug=false
.
Выходные данные должны выглядеть следующим образом:
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aks 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 3.377s. Listening on: http://localhost:8080
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Нажмите клавишу W в терминале, где выполняется режим разработки Quarkus. Ключ w открывает веб-браузер по умолчанию для отображения Todo
приложения. Вы также можете получить доступ к графическому интерфейсу http://localhost:8080
приложения напрямую.
Попробуйте выбрать несколько элементов todo в списке дел. Пользовательский интерфейс указывает выделение с помощью стиля текста с зачеркнутыми элементами. Вы также можете добавить новый элемент todo в список дел, введя "Проверить приложения Todo" и нажав клавишу ВВОД, как показано на следующем снимке экрана:
Доступ к API RESTful (/api
) для получения всех элементов todo, которые хранятся в локальной базе данных PostgreSQL:
curl --verbose http://localhost:8080/api | jq .
Выходные данные должны выглядеть следующим образом:
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100 664 100 664 0 0 13278 0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
{
"id": 1,
"title": "Introduction to Quarkus Todo App",
"completed": false,
"order": 0,
"url": null
},
{
"id": 2,
"title": "Quarkus on Azure App Service",
"completed": false,
"order": 1,
"url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
},
{
"id": 3,
"title": "Quarkus on Azure Container Apps",
"completed": false,
"order": 2,
"url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
},
{
"id": 4,
"title": "Quarkus on Azure Functions",
"completed": false,
"order": 3,
"url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
},
{
"id": 5,
"title": "Verify Todo apps",
"completed": false,
"order": 5,
"url": null
}
]
Нажмите q, чтобы выйти из режима разработки Quarkus.
Создание ресурсов Azure для запуска приложения Quarkus
В этом разделе показано, как создать следующие ресурсы Azure для запуска примера приложения Quarkus:
- База данных Azure для PostgreSQL
- Реестр контейнеров Azure (ACR)
- Служба Azure Kubernetes (AKS)
Некоторые из этих ресурсов должны иметь уникальные имена в область подписки Azure. Чтобы обеспечить эту уникальность, можно использовать инициалы, последовательность, дату, суффикс шаблон. Чтобы применить этот шаблон, присвойте ресурсам имя, перечислив свои инициалы, некоторые порядковые номера, текущую дату и определенный суффикс ресурса, например rg
для группы ресурсов. Используйте следующие команды, чтобы определить некоторые переменные среды для последующего использования:
export UNIQUE_VALUE=<your unique value, such as ejb010717>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg
export LOCATION=<your desired Azure region for deploying your resources. For example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}reg
export DB_SERVER_NAME=${UNIQUE_VALUE}db
export CLUSTER_NAME=${UNIQUE_VALUE}aks
export AKS_NS=${UNIQUE_VALUE}ns
Создание базы данных Azure для PostgreSQL
База данных Azure для PostgreSQL — это управляемая служба для запуска, управления и масштабирования высокодоступных баз данных PostgreSQL в облаке Azure. В этом разделе описано, как создать один сервер База данных Azure для PostgreSQL и подключиться к нему. Однако при выполнении действий в кратком руководстве необходимо использовать параметры в следующей таблице для настройки развертывания базы данных для примера приложения Quarkus. Замените переменные среды фактическими значениями при заполнении полей в портал Azure.
Параметр | значение | Описание |
---|---|---|
Группа ресурсов | ${RESOURCE_GROUP_NAME} |
Выберите Создать. Развертывание создает эту новую группу ресурсов. |
Имя сервера | ${DB_SERVER_NAME} |
Это значение является частью имени узла для сервера базы данных. |
Расположение | ${LOCATION} |
Выберите расположение из раскрывающегося списка. Запишите расположение. Это же расположение необходимо использовать для других создаваемых ресурсов Azure. |
Имя администратора | quarkus | В примере кода предполагается, что это значение. |
Пароль | Secret123456 | В примере кода предполагается, что это значение. |
Учитывая эти подстановки значений, выполните действия, описанные в кратком руководстве. Создайте сервер База данных Azure для PostgreSQL с помощью портал Azure до раздела "Настройка правила брандмауэра". Затем в разделе "Настройка правила брандмауэра" обязательно выберите "Да для разрешения доступа к службам Azure", а затем нажмите кнопку "Сохранить". Если вы игнорируете это, приложение Quarkus не может получить доступ к базе данных и просто не удается запустить.
Выполнив действия, описанные в кратком руководстве, в разделе "Настройка правила брандмауэра", включая шаг, позволяющий получить доступ к службам Azure, вернитесь к этой статье.
Создание базы данных Todo в PostgreSQL
Созданный вами ранее сервер PostgreSQL пуст. У него нет базы данных, которую можно использовать с приложением Quarkus. Создайте базу данных с именем todo
, выполнив следующую команду:
az postgres db create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name todo \
--server-name ${DB_SERVER_NAME}
Необходимо использовать todo
в качестве имени базы данных, так как пример кода предполагает, что имя базы данных.
Если команда выполнена успешно, выходные данные выглядят примерно так:
{
"charset": "UTF8",
"collation": "English_United States.1252",
"id": "/subscriptions/REDACTED/resourceGroups/ejb010718rg/providers/Microsoft.DBforPostgreSQL/servers/ejb010718db/databases/todo",
"name": "todo",
"resourceGroup": "ejb010718rg",
"type": "Microsoft.DBforPostgreSQL/servers/databases"
}
Создание экземпляра Microsoft Реестр контейнеров Azure
Так как Quarkus — это облачная технология, она имеет встроенную поддержку создания контейнеров, работающих в Kubernetes. Kubernetes полностью зависит от наличия реестра контейнеров, из которого он находит образы контейнеров для запуска. AKS имеет встроенную поддержку Реестр контейнеров Azure (ACR).
Создайте экземпляр ACR с помощью команды az acr create. В следующем примере создается экземпляр ACR с именем значения переменной ${REGISTRY_NAME}
среды:
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--location ${LOCATION} \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Через некоторое время вы увидите выходные данные JSON, содержащие следующие строки:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "<YOUR_RESOURCE_GROUP>",
Подключение docker в экземпляр ACR
Войдите в экземпляр ACR. Вход позволяет отправить изображение. Чтобы проверить подключение, используйте следующие команды:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
echo $LOGIN_SERVER
export USER_NAME=$(az acr credential show \
--name $REGISTRY_NAME \
--query 'username' \
--output tsv)
echo $USER_NAME
export PASSWORD=$(az acr credential show \
--name $REGISTRY_NAME \
--query 'passwords[0].value' \
--output tsv)
echo $PASSWORD
docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD
Если вы используете Podman вместо Docker, внесите необходимые изменения в команду.
Если вы успешно вошли в экземпляр ACR, вы увидите Login Succeeded
в конце выходных данных команды.
Создание кластера AKS
Используйте команду az aks create, чтобы создать кластер AKS. В следующем примере создается кластер с именем со значением переменной ${CLUSTER_NAME}
среды с одним узлом. Кластер подключен к экземпляру ACR, созданному на предыдущем шаге. Выполнение этой команды занимает несколько минут.
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--location ${LOCATION} \
--name $CLUSTER_NAME \
--attach-acr $REGISTRY_NAME \
--node-count 1 \
--generate-ssh-keys \
--enable-managed-identity
Через несколько минут команда завершает работу и возвращает данные в формате JSON в кластере, включая следующие выходные данные:
"nodeResourceGroup": "MC_<your resource_group_name>_<your cluster name>_<your region>",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "<your resource group name>",
Подключение к кластеру AKS
Для управления кластером Kubernetes используйте kubectl
(клиент командной строки Kubernetes). Если вы используете Azure Cloud Shell, kubectl
уже установлен. Чтобы установить kubectl
локально, используйте команду az aks install-cli , как показано в следующем примере:
az aks install-cli
Дополнительные сведения о kubectl
средстве командной строки (kubectl) см. в документации kubernetes.
Чтобы настроить kubectl
подключение к кластеру Kubernetes, используйте команду az aks get-credentials , как показано в следующем примере. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing \
--admin
Успешные выходные данные включают текст, аналогичный следующему примеру:
Merged "ejb010718aks-admin" as current context in /Users/edburns/.kube/config
Вы можете найти его полезным для псевдонима k
kubectl
. В этом случае используйте следующую команду:
alias k=kubectl
Чтобы проверить подключение к кластеру, используйте kubectl get
команду для возврата списка узлов кластера, как показано в следующем примере:
kubectl get nodes
В следующем примере показан единый узел, созданный на предыдущих шагах. Убедитесь, что узел находится в состоянии Ready (Готово):
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.23.8
Создание пространства имен в AKS
Используйте следующую команду, чтобы создать новое пространство имен в службе Kubernetes для приложения Quarkus:
kubectl create namespace ${AKS_NS}
Выходные данные должны выглядеть следующим образом:
namespace/<your namespace> created
Настройка собственной конфигурации облака
В качестве облачной технологии Quarkus предлагает возможность автоматически настраивать ресурсы для стандартных Kubernetes, Red Hat OpenShift и Knative. Дополнительные сведения см. в руководстве Quarkus Kubernetes, руководстве Quarkus OpenShift и руководстве quarkus Knative. Разработчики могут развернуть приложение в целевом кластере Kubernetes, применяя созданные манифесты.
Чтобы создать соответствующие ресурсы Kubernetes, используйте следующую команду, чтобы добавить quarkus-kubernetes
и container-image-jib
расширения в локальный терминал:
quarkus ext add kubernetes container-image-jib
Quarkus изменяет POM, чтобы убедиться, что эти расширения перечислены как <dependencies>
. Если будет предложено установить что-то вызываемое JBang
, ответьте да и разрешите его установке.
Выходные данные должны выглядеть следующим образом:
[SUCCESS] ✅ Extension io.quarkus:quarkus-kubernetes has been installed
[SUCCESS] ✅ Extension io.quarkus:quarkus-container-image-jib has been installed
Чтобы проверить добавление расширений, можно запустить git diff
и проверить выходные данные.
Как облачная технология Quarkus поддерживает понятие профилей конфигурации. Quarkus имеет следующие три встроенных профиля:
dev
— активируется в режиме разработкиtest
— активируется при выполнении тестовprod
— Профиль по умолчанию, если он не запущен в режиме разработки или тестирования
Quarkus поддерживает любое количество именованных профилей по мере необходимости.
Остальные действия, описанные в этом разделе, позволяют раскомментировать и настроить значения в файле src/main/resources/application.properties . Убедитесь, что все строки, начинающиеся с # %prod.
, раскомментированы путем удаления ведущего #
.
Префикс prod.
указывает, что эти свойства активны при выполнении prod
в профиле. Дополнительные сведения о профилях конфигурации см. в документации Quarkus.
Конфигурация базы данных
Добавьте следующие переменные конфигурации базы данных. Замените значения фактическими <DB_SERVER_NAME_VALUE>
значениями переменной ${DB_SERVER_NAME}
среды.
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://<DB_SERVER_NAME_VALUE>.postgres.database.azure.com:5432/todo
%prod.quarkus.datasource.jdbc.driver=org.postgresql.Driver
%prod.quarkus.datasource.username=quarkus@<DB_SERVER_NAME_VALUE>
%prod.quarkus.datasource.password=Secret123456
%prod.quarkus.hibernate-orm.database.generation=drop-and-create
Конфигурация Kubernetes
Добавьте следующие переменные конфигурации Kubernetes. service-type
Обязательно установите для load-balancer
доступа к приложению внешний доступ.
# AKS configurations
%prod.quarkus.kubernetes.deployment-target=kubernetes
%prod.quarkus.kubernetes.service-type=load-balancer
Конфигурация образа контейнера
В качестве облачной технологии Quarkus поддерживает создание образов контейнеров OCI, совместимых с Docker и Podman. Добавьте следующие переменные образа контейнера. Замените значения <LOGIN_SERVER_VALUE>
<USER_NAME_VALUE>
и ${USER_NAME}
значения фактических значений ${LOGIN_SERVER}
переменных среды соответственно.
# Container Image Build
%prod.quarkus.container-image.build=true
%prod.quarkus.container-image.registry=<LOGIN_SERVER_VALUE>
%prod.quarkus.container-image.group=<USER_NAME_VALUE>
%prod.quarkus.container-image.name=todo-quarkus-aks
%prod.quarkus.container-image.tag=1.0
Создание образа контейнера и отправка его в ACR
Теперь используйте следующую команду для создания самого приложения. Эта команда использует расширения Kubernetes и Jib для создания образа контейнера.
quarkus build --no-tests
Выходные данные должны заканчиваться BUILD SUCCESS
. Файлы манифеста Kubernetes создаются в target/kubernetes, как показано в следующем примере:
tree target/kubernetes
target/kubernetes
├── kubernetes.json
└── kubernetes.yml
0 directories, 2 files
Вы можете проверить, создается ли образ контейнера, а также с помощью docker
podman
командной строки (CLI). Выходные данные выглядят примерно так:
docker images | grep todo
<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks 1.0 b13c389896b7 18 minutes ago 420MB
Отправьте образы контейнеров в ACR с помощью следующей команды:
export TODO_QUARKUS_TAG=$(docker images | grep todo-quarkus-aks | head -n1 | cut -d " " -f1)
echo ${TODO_QUARKUS_TAG}
docker push ${TODO_QUARKUS_TAG}:1.0
Результат должен выглядеть следующим образом:
The push refers to repository [<LOGIN_SERVER_VALUE>/<USER_NAME_VALUE>/todo-quarkus-aks]
dfd615499b3a: Pushed
56f5cf1aa271: Pushed
4218d39b228e: Pushed
b0538737ed64: Pushed
d13845d85ee5: Pushed
60609ec85f86: Pushed
1.0: digest: sha256:0ffd70d6d5bb3a4621c030df0d22cf1aa13990ca1880664d08967bd5bab1f2b6 size: 1995
После отправки приложения в ACR можно сообщить AKS запустить приложение.
Развертывание приложения Quarkus в AKS
В этом разделе показано, как запустить пример приложения Quarkus в созданных ресурсах Azure.
Использование kubectl для развертывания приложения Quarkus в AKS
Разверните ресурсы Kubernetes с помощью kubectl
командной строки, как показано в следующем примере:
kubectl apply -f target/kubernetes/kubernetes.yml -n ${AKS_NS}
Выходные данные должны выглядеть следующим образом:
deployment.apps/quarkus-todo-demo-app-aks created
Убедитесь, что приложение запущено с помощью следующей команды:
kubectl -n $AKS_NS get pods
Если значение STATUS
поля отображает что-либо другое Running
, устраните и устраните проблему, прежде чем продолжить. Это может помочь изучить журналы pod с помощью следующей команды:
kubectl -n $AKS_NS logs $(kubectl -n $AKS_NS get pods | grep quarkus-todo-demo-app-aks | cut -d " " -f1)
EXTERNAL-IP
Получите доступ к приложению Todo с помощью следующей команды:
kubectl get svc -n ${AKS_NS}
Выходные данные должны выглядеть следующим образом:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
quarkus-todo-demo-app-aks LoadBalancer 10.0.236.101 20.12.126.200 80:30963/TCP 37s
Для сохранения значения переменной среды в качестве полного EXTERNAL-IP
URL-адреса можно использовать следующую команду:
export QUARKUS_URL=http://$(kubectl get svc -n ${AKS_NS} | grep quarkus-todo-demo-app-aks | cut -d " " -f10)
echo $QUARKUS_URL
Откройте новый веб-браузер со значением ${QUARKUS_URL}
. Затем добавьте новый элемент todo с текстом Deployed the Todo app to AKS
. Кроме того, выберите Introduction to Quarkus Todo App
элемент как завершенный.
Доступ к API RESTful (/api
) для получения всех элементов todo, хранящихся в базе данных Azure PostgreSQL, как показано в следующем примере:
curl --verbose ${QUARKUS_URL}/api | jq .
Выходные данные должны выглядеть следующим образом:
* Connected to 20.237.68.225 (20.237.68.225) port 80 (#0)
> GET /api HTTP/1.1
> Host: 20.237.68.225
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 828
< Content-Type: application/json;charset=UTF-8
<
[
{
"id": 2,
"title": "Quarkus on Azure App Service",
"completed": false,
"order": 1,
"url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
},
{
"id": 3,
"title": "Quarkus on Azure Container Apps",
"completed": false,
"order": 2,
"url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
},
{
"id": 4,
"title": "Quarkus on Azure Functions",
"completed": false,
"order": 3,
"url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
},
{
"id": 5,
"title": "Deployed the Todo app to AKS",
"completed": false,
"order": 5,
"url": null
},
{
"id": 1,
"title": "Introduction to Quarkus Todo App",
"completed": true,
"order": 0,
"url": null
}
]
Проверка обновления базы данных с помощью Azure Cloud Shell
Откройте Azure Cloud Shell в портал Azure, выбрав значок Cloud Shell, как показано на следующем снимке экрана:
Выполните следующую команду локально и вставьте результат в Azure Cloud Shell:
echo psql --host=${DB_SERVER_NAME}.postgres.database.azure.com --port=5432 --username=quarkus@${DB_SERVER_NAME} --dbname=todo
При запросе пароля используйте значение, которое вы использовали при создании базы данных.
Используйте следующий запрос, чтобы получить все элементы todo:
select * from todo;
Выходные данные должны выглядеть примерно так, как в следующем примере, и должны содержать те же элементы в графическом интерфейсе приложения Todo, показанном ранее:
Если вы видите MORE
в выходных данных, введите q , чтобы выйти из пейджера.
Введите \q , чтобы выйти из psql
программы и вернуться в Cloud Shell.
Очистка ресурсов
Чтобы избежать расходов за использование Azure, необходимо удалить ненужные ресурсы. Чтобы удалить ненужные кластер, группу ресурсов, службу контейнеров, реестр контейнеров и все связанные с ними ресурсы, выполните команду az group delete.
git reset --hard
docker rmi ${TODO_QUARKUS_TAG}:1.0
docker rmi postgres
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Вы также можете использовать для docker rmi
удаления образов postgres
контейнеров и testcontainers
создания в режиме разработки Quarkus.