Azure предоставляет несколько сервисов для запуска контейнеров -- от простых одноразовых задач до сложных микросервисных архитектур.
Azure Container Instances (ACI)
ACI -- самый простой способ запустить контейнер в Azure. Не нужно управлять серверами или кластерами. Контейнер запускается за секунды.
# Запуск одного контейнера
az container create \
--resource-group rg-orderapp \
--name order-api \
--image myregistry.azurecr.io/order-api:latest \
--cpu 1 --memory 1.5 \
--ports 80 \
--environment-variables \
ConnectionString="Server=sql-orderapp.database.windows.net;..." \
ASPNETCORE_ENVIRONMENT=Production \
--ip-address public
Характеристики ACI:
- Запуск за секунды, без предварительной настройки
- Посекундная тарификация
- Поддержка Linux и Windows контейнеров
- До 4 vCPU и 16 GB RAM на группу контейнеров
- Монтирование Azure Files для persistent storage
Multi-Container Groups
Группа контейнеров -- аналог Pod в Kubernetes. Контейнеры в группе разделяют сеть (localhost) и хранилище.
# deploy-aci.yaml
apiVersion: 2021-10-01
type: Microsoft.ContainerInstance/containerGroups
properties:
osType: Linux
containers:
- name: order-api
properties:
image: myregistry.azurecr.io/order-api:latest
ports:
- port: 8080
resources:
requests:
cpu: 1.0
memoryInGb: 1.5
- name: nginx-sidecar
properties:
image: nginx:latest
ports:
- port: 80
resources:
requests:
cpu: 0.5
memoryInGb: 0.5
ipAddress:
type: Public
ports:
- port: 80
az container create \
--resource-group rg-orderapp \
--file deploy-aci.yaml
Когда использовать ACI:
- Batch-задачи и одноразовые операции
- CI/CD агенты
- Тестирование контейнеров
- Простые микросервисы с sidecar-контейнерами
Azure Container Apps
Container Apps -- современный serverless-сервис для контейнеров. Построен на основе Kubernetes, но абстрагирует его сложность.
Ключевые преимущества:
- Автомасштабирование до нуля (не платите, когда нет трафика)
- Встроенный ingress-контроллер (HTTPS, custom domains)
- Service discovery между контейнерами
- Revisions для blue-green и canary деплоя
- Поддержка Dapr для микросервисных паттернов
- Масштабирование на основе событий (KEDA): HTTP-трафик, очереди, Cron
# Создание Container Apps Environment
az containerapp env create \
--name env-orderapp \
--resource-group rg-orderapp \
--location westeurope
# Деплой приложения
az containerapp create \
--name order-api \
--resource-group rg-orderapp \
--environment env-orderapp \
--image myregistry.azurecr.io/order-api:latest \
--target-port 8080 \
--ingress external \
--min-replicas 0 \
--max-replicas 10 \
--cpu 0.5 --memory 1.0Gi
Revisions и управление трафиком
Container Apps поддерживает несколько ревизий одновременно. Можно постепенно переключать трафик:
# Создание новой ревизии
az containerapp update \
--name order-api \
--resource-group rg-orderapp \
--image myregistry.azurecr.io/order-api:v2
# Распределение трафика: 80% на v1, 20% на v2
az containerapp ingress traffic set \
--name order-api \
--resource-group rg-orderapp \
--revision-weight order-api--v1=80 order-api--v2=20
Azure Container Registry (ACR)
ACR -- частный реестр Docker-образов в Azure. Интегрируется с ACI, Container Apps и AKS.
# Создание реестра
az acr create --name acrorderapp --resource-group rg-orderapp --sku Basic
# Сборка образа прямо в ACR (без локального Docker!)
az acr build --registry acrorderapp --image order-api:v1 .
# Включение admin-доступа (для быстрого тестирования)
az acr update --name acrorderapp --admin-enabled true
# Просмотр образов
az acr repository list --name acrorderapp --output table
SKU-уровни ACR:
| SKU | Storage | Webhooks | Geo-replication | Private Link |
|---|---|---|---|---|
| Basic | 10 GB | 2 | Нет | Нет |
| Standard | 100 GB | 10 | Нет | Нет |
| Premium | 500 GB | 500 | Да | Да |
ACR Tasks
ACR Tasks позволяет автоматизировать сборку образов:
# Автоматическая сборка при push в GitHub
az acr task create \
--name build-order-api \
--registry acrorderapp \
--image order-api:{{.Run.ID}} \
--context https://github.com/myorg/order-api.git \
--file Dockerfile \
--git-access-token $PAT
Сравнение контейнерных сервисов
| Критерий | ACI | Container Apps | AKS |
|---|---|---|---|
| Сложность | Минимальная | Средняя | Высокая |
| Масштабирование | Ручное | Авто (до 0) | Авто (cluster autoscaler) |
| Оркестрация | Нет | Встроенная | Полный Kubernetes |
| Service mesh | Нет | Dapr (встроенный) | Istio, Linkerd |
| Стоимость | За контейнер/сек | За vCPU + память | За ноды |
| Сценарий | Batch, тесты | Микросервисы, API | Сложные системы |