Deploying a Docker container to Azure Container Apps is a modern and scalable way to run cloud-native applications without managing complex infrastructure. Azure Container Apps is a fully managed serverless container platform from Microsoft Azure that allows you to run Docker containers, microservices, and APIs with automatic scaling and built-in networking. This guide explains, in simple words, how to deploy a Docker container to Azure Container Apps using best practices for production-ready .NET, Node.js, or other containerized applications.
What Is Azure Container Apps?
Azure Container Apps is a managed cloud service that allows you to run containerized applications directly in Microsoft Azure. It is designed for microservices architecture, background processing, REST APIs, and event-driven applications.
With Azure Container Apps, you do not need to manage Kubernetes clusters manually. Azure handles scaling, load balancing, HTTPS endpoints, and container orchestration behind the scenes. This makes it ideal for startups, enterprise systems, and scalable cloud-native applications.
Prerequisites Before Deployment
Before deploying your Docker container to Azure Container Apps, ensure you have:
An active Azure subscription
Azure CLI installed
Docker installed locally
A built and tested Docker image
Azure Container Registry (optional but recommended)
Using Azure Container Registry (ACR) is recommended for secure and private container image storage.
Step 1: Create a Docker Image
First, make sure your application has a Dockerfile.
Example for an ASP.NET Core Web API:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Build the Docker image locally:
docker build -t myapp:latest .
Test it locally to ensure it works properly before deploying to Azure.
Step 2: Push Docker Image to Azure Container Registry
Create an Azure Container Registry (ACR):
az acr create --resource-group MyResourceGroup \
--name myregistry \
--sku Basic
Login to ACR:
az acr login --name myregistry
Tag your image:
docker tag myapp:latest myregistry.azurecr.io/myapp:latest
Push the image:
docker push myregistry.azurecr.io/myapp:latest
Now your Docker image is securely stored in Azure Container Registry.
Step 3: Create an Azure Container Apps Environment
Azure Container Apps requires an environment for networking and scaling.
az containerapp env create \
--name my-container-env \
--resource-group MyResourceGroup \
--location eastus
Choose a region close to your users for better performance and lower latency.
Step 4: Deploy Docker Container to Azure Container Apps
Now deploy the container:
az containerapp create \
--name my-container-app \
--resource-group MyResourceGroup \
--environment my-container-env \
--image myregistry.azurecr.io/myapp:latest \
--target-port 80 \
--ingress external \
--registry-server myregistry.azurecr.io
This command:
Creates a container app
Connects it to your container registry
Exposes it publicly with an external endpoint
Sets the application port
After deployment, Azure provides a public URL to access your application.
Step 5: Configure Scaling Rules
Azure Container Apps supports automatic scaling based on HTTP traffic, CPU usage, or event triggers.
You can configure minimum and maximum replicas:
az containerapp update \
--name my-container-app \
--resource-group MyResourceGroup \
--min-replicas 1 \
--max-replicas 5
This ensures your application scales automatically based on demand.
Step 6: Configure Environment Variables
If your application requires configuration values such as database connection strings, set them securely:
az containerapp update \
--name my-container-app \
--resource-group MyResourceGroup \
--set-env-vars "ConnectionStrings__Default=your_connection_string"
For production systems, use Azure Key Vault for secure secret management.
Monitoring and Logging in Azure Container Apps
Azure Container Apps integrates with Azure Monitor and Log Analytics. This allows you to:
View application logs
Monitor CPU and memory usage
Track request performance
Diagnose production issues
Proper monitoring is essential for enterprise-grade cloud deployments.
Best Practices for Production Deployment
Use Azure Container Registry instead of public Docker Hub for security
Enable HTTPS and managed certificates
Configure autoscaling properly
Store secrets in Azure Key Vault
Enable logging and monitoring
Use staging environments before production release
Following these best practices ensures a secure, scalable, and reliable cloud-native deployment.
Common Deployment Issues
Incorrect container port configuration
Image not found in registry
Missing registry authentication
Application not listening on correct port
Resource group or region mismatch
Carefully verifying configuration prevents most deployment failures.
Summary
Deploying a Docker container to Azure Container Apps involves building a container image, pushing it to Azure Container Registry, creating a container apps environment, and deploying the container with proper configuration for networking and scaling. Azure Container Apps simplifies container orchestration by providing automatic scaling, managed infrastructure, built-in HTTPS support, and integrated monitoring. By following best practices such as secure image storage, environment variable management, autoscaling configuration, and centralized logging, developers can build scalable, cloud-native, and production-ready applications on Microsoft Azure using Docker and Azure Container Apps.