Azure Container Instances: The Optimal Platform for Single Container Deployments
Azure Container Instances (ACI) is a serverless container platform that enables you to rapidly deploy containers in the cloud without managing infrastructure. ACI is particularly well-suited for running single containers, providing a simple, scalable, and cost-effective option.
In this in-depth guide, we‘ll explore the benefits of ACI for single container deployments, walk through an example deployment, and share an AI/ML expert perspective on how ACI can enable machine learning workloads.
The Advantages of ACI for Single Container Workloads
For scenarios requiring a single container, ACI offers several key benefits compared to deploying containers in virtual machines or using orchestration platforms like Azure Kubernetes Service (AKS).
Fast startup times
With ACI, you can launch a new container in seconds, without waiting for VM provisioning or pod scheduling. This makes ACI ideal for burstable or event-driven workloads that need to scale on-demand.
Per-second billing
ACI has a unique consumption-based pricing model, where you only pay for the CPU, memory and storage resources your container uses on a per-second basis. There‘s no need to pre-provision VMs or pay for idle orchestrator nodes.
No infrastructure management
As a serverless platform, ACI abstracts the underlying compute infrastructure. You don‘t need to manage VMs, configure clusters, or update orchestrator versions. This frees up time to focus on your application vs. the infrastructure.
Built-in networking
Each ACI instance gets a public IP address and fully qualified domain name (FQDN) by default, making it easy to expose services to the internet. ACI also supports Azure Virtual Network integration for private deployments.
Security and isolation
ACI provides hypervisor-level security and isolation between container groups. Containers run in dedicated VMs for added security compared to traditional container hosts.
Understanding ACI Pricing
One of the most attractive aspects of ACI is the granular, consumption-based pricing model. Unlike VMs that have an hourly cost regardless of utilization, with ACI you only pay for the resources your container consumes while running.
ACI pricing has three components:
- vCPU usage – Billed per vCPU-second
- Memory usage – Billed per GB-second
- Storage – Billed per GB-month for persisted data
Pricing varies based on the Azure region and the host operating system (Linux or Windows). For example, here are the current rates for Linux containers in East US:
| Resource | Price |
|---|---|
| vCPU | $0.0000125 per vCPU-second |
| Memory | $0.0000025 per GB-second |
| Storage | $0.0184 per GB-month |
Source: Azure Container Instances pricing – https://azure.microsoft.com/en-us/pricing/details/container-instances/
There is a minimum charge of 1 minute per container group deployment. Stopped containers do not incur compute charges.
Data transfer costs apply, with the first 5 GB outbound and all inbound data free each month.
Deploying a Container to ACI: Step-by-Step Example
To illustrate the simplicity of running a container in ACI, let‘s walk through deploying a sample web application. We‘ll use a Python Flask app, but the same process applies to any containerized application.
Prerequisites
Step 1 – Build the container image
First, we need to package our application into a container image. Here‘s a sample Dockerfile for our Flask app:
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
Build the image:
docker build -t myapp:v1 .
Step 2 – Create an Azure Container Registry
Azure Container Registry (ACR) provides a private registry to store and manage your container images close to your ACI deployments. Create a new ACR:
az group create --name myResourceGroup --location eastus
az acr create --resource-group myResourceGroup --name myACR --sku Basic
Step 3 – Push image to Azure Container Registry
Before we can deploy to ACI, we need to push our container image to ACR:
az acr login --name myACR
docker tag myapp:v1 myACR.azurecr.io/myapp:v1
docker push myACR.azurecr.io/myapp:v1
Step 4 – Deploy to Azure Container Instances
Now we‘re ready to deploy our container to ACI using the Azure CLI:
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image myACR.azurecr.io/myapp:v1 \
--dns-name-label myapp \
--ports 80
This command deploys the container with a public IP and DNS name, exposing port 80.
Step 5 – Test the deployed application
Grab the public URL for your container:
az container show --resource-group myResourceGroup --name mycontainer --query ipAddress.fqdn
Access the URL in a browser and you should see your Flask app up and running in ACI!
Best Practices for Running Containers in ACI
To optimize your usage of ACI, consider the following best practices:
-
Right-size containers – Specify the minimum required CPU and memory for your workload to avoid over-provisioning and reduce costs. Use the ACI cost estimator to model pricing.
-
Use Azure Container Registry – Store your images in ACR for proximity to ACI, integrated security, and faster deploys.
-
Enable container logging – Set up log analytics to centrally collect and analyze container stdout/stderr logs.
-
Embrace serverless design – Structure your application to run as multiple, event-driven containers vs. always-on services. Take advantage of ACI‘s fast startup to run containers on-demand in response to events.
-
Integrate with Azure services – Trigger ACI from serverless compute like Azure Functions or Logic Apps. Persist state to external storage services.
Comparing ACI to Other Azure Container Options
For a single container, you have a few different hosting options in Azure. Here‘s how ACI compares to the main alternatives across key criteria:
| Criteria | ACI | Container in VM | Web App for Containers | AKS |
|---|---|---|---|---|
| Pricing | Per-second | Hourly | Per-app | Per-cluster |
| Management | Serverless | Self-managed | Managed PaaS | Managed |
| Scaling | Manual | Manual | Auto app scaling | Auto cluster and pod scaling |
| Networking | Public IP, VNet integration | Azure networking stack | Built-in load balancer | Full Software Defined Networking |
| Use cases | Simple apps, batch jobs, on-demand | Lift and shift, specialized workloads | Web apps and APIs | Complex multi-service apps |
In general, ACI provides the simplest deployment experience and most granular pricing, best suited for basic, lightweight containers. For more complex scenarios, a managed platform like AKS will be a better fit.
Accelerating AI/ML Workflows with ACI
From an AI/ML perspective, ACI opens up interesting opportunities to streamline machine learning workflows. A few key scenarios include:
Rapid Model Deployment
With ACI, data scientists can quickly deploy trained models packaged in containers without provisioning infrastructure. This enables faster iteration from training to inference.
Batch Scoring
For batch workloads, spin up ACI on-demand to perform parallel model scoring on new datasets. ACI can pull data from blob storage, execute the scoring, and persist results back to storage, all orchestrated by Azure Data Factory or Functions.
A/B Testing and Canary Releases
Use ACI to deploy new candidate model versions alongside the current production model. Direct a portion of inference traffic to the new versions to compare performance. ACI makes it easy to deploy and teardown new versions.
Auto-scaling with KEDA
For online inference scenarios, use the KEDA event-driven autoscaler to automatically adjust ACI replica counts based on incoming requests or queue length. This provides automated scaling while maintaining ACI‘s per-second pricing.
Here‘s an example architecture leveraging ACI for model inferencing:

Image source: Real-time ML inference using Azure ML with Event Hubs and AKS or ACI
Latest ACI Enhancements
Microsoft continues to invest in ACI and release new capabilities. Some of the latest updates as of early 2023:
- GPU support – Attach GPUs to your ACI deployments for accelerated machine learning and high-performance computing workloads. Up to 4 GPUs are supported per container.
- Private endpoints – Restrict access to ACI using private endpoints in a VNet. This provides more secure connectivity between ACI and other Azure resources.
- Health probes – Configure HTTP GET or exec probes to determine if your ACI containers are healthy and ready to receive traffic.
- Confidential computing – Run your containers in a hardware-based trusted execution environment (Intel SGX enclaves) for enhanced security to protect data in use.
Source: Azure Container Instances Documentation
Conclusion
Azure Container Instances provides a fast, simple, and cost-effective platform for deploying single containers in the cloud. As a serverless offering, ACI makes it easy to run containers without managing infrastructure, with the added benefits of per-second billing, public IP connectivity, and VNet integration.
For AI/ML workloads, ACI can help accelerate the entire model lifecycle, from training through inference and continuous iteration. The ability to rapidly deploy models in containers on-demand is a game changer.
While not suited for every scenario, ACI fills an important gap for lightweight container deployments. As the service continues to evolve, it‘s an increasingly attractive option for running containers in Azure.