Containers in Azure: Your Options and How to Choose
Azure has five distinct services for running containers, and choosing between them is one of the most common sources of confusion for teams new to Azure. This page maps the container landscape — what each service is good for, what it costs you in complexity, and a decision pattern to help you pick the right one without needing to evaluate all five in depth.
The five container services in Azure
| Service | Container type | Scaling | Complexity |
|---|---|---|---|
| Azure Container Instances (ACI) | Single container or container group | None (manual create/delete) | Minimal |
| Azure App Service (containers) | Single container, HTTP workloads | Manual or metric-based | Low |
| Azure Container Apps | Microservices, event-driven jobs | Automatic (to zero) | Medium-low |
| Azure Kubernetes Service (AKS) | Any containerised workload | Full Kubernetes HPA/cluster autoscaler | High |
| VM Scale Sets + Docker | Custom container orchestration | VMSS autoscaling | Very high |
You will rarely need VM Scale Sets with manual Docker orchestration — that approach pre-dates AKS and Container Apps and has almost no good reason for new deployments. The real decision is between ACI, App Service, Container Apps, and AKS.
When to use Azure Container Instances
ACI is for disposable, job-like workloads. You create a container, it runs, it exits. ACI is not a platform for running services — it has no load balancing across replicas, no autoscaling, and no service discovery. Think of it as a managed Docker run command in the cloud.
Good ACI use cases: nightly batch processing jobs, data transformation pipelines, one-off migration scripts, CI/CD task runners, and testing a new container image quickly without setting up infrastructure. See Azure Container Instances for the full picture.
When App Service handles containers well
If you already have App Service experience and want to run a containerised web app or API, deploying a container to App Service is straightforward. You swap the runtime setting for a container image reference. Everything else — deployment slots, HTTPS, custom domains, managed identities, diagnostic logging — works identically to code-based App Service deployments.
App Service for containers makes sense when:
- You are running a single-container web application or API
- You want deployment slots for zero-downtime releases
- The team is already familiar with App Service and wants to avoid a new platform
- You need App Service’s built-in authentication middleware (Easy Auth)
App Service for containers does not support multiple containers as a unit (container groups/pods). For that, use Container Apps or AKS.
When Container Apps is the right choice
Azure Container Apps is the middle ground between ACI and AKS. It runs containerised microservices with automatic scaling, service-to-service networking, traffic splitting, and event-driven triggers — without requiring Kubernetes knowledge to operate.
Container Apps fits well when:
- You have multiple microservices that need to communicate internally
- Your service needs to scale to zero during off-hours and scale out quickly under load
- You want KEDA-powered event-driven scaling (scale based on Service Bus queue depth, HTTP traffic, custom metrics)
- You want Dapr integration for distributed application patterns (pub/sub, state management, service invocation)
- You need traffic splitting between container revisions for canary or blue-green deployments
Container Apps uses Kubernetes internally but hides the cluster management. You cannot access the underlying Kubernetes API. If you need direct kubectl access, custom Kubernetes operators, or cluster-level networking control, AKS is the appropriate choice instead.
When you actually need AKS
AKS is a managed Kubernetes service. It gives you a full Kubernetes cluster — node pools, the Kubernetes API, custom operators, network plugins, service mesh options, persistent volume support. You are responsible for Kubernetes version upgrades, node pool configuration, and cluster-level concerns.
Use AKS when:
- Your organisation already runs Kubernetes and has the expertise to operate it
- You need features Container Apps does not expose: custom CRDs, cluster-level networking policies, stateful workloads with persistent volumes, Istio service mesh
- You are migrating an existing Kubernetes deployment from another cloud
- Compliance requirements mandate that you manage your own Kubernetes cluster configuration
AKS has a steeper learning curve and more operational surface area than Container Apps. For teams new to containers, starting with Container Apps and graduating to AKS only if its specific features are needed is a common and sensible progression.
AKS cluster management is covered in detail in the Containers and Kubernetes section of this site. The pages there walk through creating clusters, configuring node pools, deploying workloads, and managing upgrades.
A decision pattern for choosing
Start at the top and stop at the first description that matches your workload:
- Is it a one-off job or batch task that runs and exits? → Azure Container Instances
- Is it a single-container web app or API where the team knows App Service? → App Service (container)
- Does it need to scale to zero, have multiple services communicating, or benefit from event-driven scaling? → Azure Container Apps
- Does it need full Kubernetes features or does the team already run Kubernetes? → AKS
- Does it need OS-level customisation, custom kernel modules, or non-containerisable dependencies? → VM or VM Scale Sets
Most new containerised applications land on Container Apps. Most existing Kubernetes workloads from other clouds land on AKS. Most web APIs from teams with existing App Service experience land on App Service.
Building and storing container images
All five services pull container images from a registry. Azure Container Registry (ACR) is Azure’s private container registry — the equivalent of Docker Hub but private and integrated with Azure RBAC, managed identities, and the Azure portal.
Build and push a container image to ACR:
# Create an Azure Container Registry
az acr create \
--resource-group my-rg \
--name myorgacr \
--sku Basic
# Log in to the registry
az acr login --name myorgacr
# Build and push using the ACR build service (no local Docker needed)
az acr build \
--registry myorgacr \
--image myapp:latest \
.See Azure Container Registry overview for access control, vulnerability scanning, and image lifecycle management.
Common container confusion points
- Starting with AKS because it sounds comprehensive. AKS is powerful but demands Kubernetes expertise. Teams without Kubernetes experience often underestimate the operational complexity — cluster upgrades, node pool management, storage classes, ingress controllers. Container Apps delivers most of the same developer experience without that overhead.
- Using ACI for a persistent web service. ACI has no autoscaling, no health-check-driven replacement, and no load balancing across replicas. A service that needs to always be available under varying load is not an ACI workload.
- Treating different container services as interchangeable. Migrating from App Service to Container Apps is not just a configuration change — the networking model, authentication, secret management, and scaling configuration all differ. Choose thoughtfully at the start rather than planning to switch later.
Summary
- Azure has five container services. The practical choice for most teams is between ACI (batch jobs), App Service (simple web apps), Container Apps (scalable microservices), and AKS (full Kubernetes).
- Start with Container Apps for new containerised services unless you have a specific reason to choose AKS.
- All services pull images from a container registry — Azure Container Registry is the native choice in Azure.
- ACI for one-off tasks, Container Apps for scalable services, AKS for full Kubernetes needs.
- VM Scale Sets with Docker is a legacy pattern — avoid for new container workloads.
Frequently asked questions
Do I need to know Docker to use containers in Azure?
For most Azure container services, yes. You need to understand Docker images, Dockerfiles, and container registries to deploy containerised applications. Azure Container Registry stores your images. The services (ACI, Container Apps, App Service) pull from that registry and run the containers — but building the image is your responsibility.
Is Kubernetes required for containers in Azure?
No. Azure offers ACI, Container Apps, and App Service as managed container platforms that require no Kubernetes knowledge. AKS (Azure Kubernetes Service) is the option for teams that need full Kubernetes control. Most teams starting with containers in Azure do not need AKS.
What is the cheapest way to run a container in Azure?
For sporadic or short-lived workloads, ACI charges per second of execution and can be very cheap. For long-running services, Azure Container Apps on Consumption plan charges based on actual CPU and memory used during execution. App Service Free tier is free but has severe limits. The cheapest sustainable option for a persistent service is usually Container Apps on Consumption or App Service on a Basic plan shared across multiple apps.