AzureAzure Container RegistryContainers

azurerm_container_registry cost estimation

A managed Docker container registry. Three tiers (Basic, Standard, Premium) with different per-day rates and included storage.

An azurerm_container_registry is a managed Docker registry. Unlike AWS ECR which charges per-GB, Azure Container Registry charges a fixed per-day rate that includes a storage allotment.

Three tiers:

Basic: $0.167/day ($5.08/month). Includes 10 GB storage. Right for dev/test or small workloads. Limited to 2 simultaneous pulls per second.

Standard: $0.667/day ($20.30/month). Includes 100 GB storage. Right for production. 10 simultaneous pulls/sec, higher push/pull throughput.

Premium: $1.667/day ($50.74/month). Includes 500 GB storage. Right for large enterprises. Geo-replication (only available on Premium), content trust, private endpoints, customer-managed keys.

Storage beyond the included allotment: $0.10/GB-month extra.

Geo-replication (Premium only): adds the full per-day rate per replica region. A Premium registry replicated to 3 regions costs $50.74 × 4 = ~$203/month.

Build minutes (ACR Tasks): build operations cost $0.0001/CPU-second for standard runners, $0.0003/CPU-second for GPU runners. Most modern image builds use a few hundred CPU-seconds, costing pennies per build.

Compared to ECR: ECR is purely per-GB plus egress. ACR is a fixed daily rate plus overage. For small registries, ACR Basic is cheaper than ECR. For large registries, ECR's per-GB model can be cheaper than ACR Premium.

c3x reads the SKU (Basic/Standard/Premium) and georeplications. Storage above the included allotment uses c3x-usage.yml for the actual size.

Terraform example

A minimal but realistic configuration that C3X can estimate.

resource "azurerm_container_registry" "main" {
  name                = "productionregistry"
  resource_group_name = azurerm_resource_group.main.name
  location            = "eastus"
  sku                 = "Standard"
  admin_enabled       = false

  identity {
    type = "SystemAssigned"
  }

  retention_policy_in_days = 7
}

Pricing dimensions

What you actually pay for when you provision azurerm_container_registry.

DimensionUnitWhat's being charged
Basic tierper day10 GB included storage. Right for dev/test.
$0.167/day ≈ $5.08/month
Standard tierper day100 GB included storage. Production default.
$0.667/day ≈ $20.30/month
Premium tierper day500 GB included storage, geo-replication, content trust, private endpoints.
$1.667/day ≈ $50.74/month
Storage overageper GB-monthStorage beyond included allotment.
$0.10/GB-month
Geo-replication (Premium)per region per dayEach replica region adds the full per-day rate.
$1.667/region/day
ACR Tasks (build runner)per CPU-secondImage build operations. Standard runner $0.0001/CPU-sec; GPU $0.0003/CPU-sec.

Optimization tips

Common ways to reduce azurerm_container_registry cost without changing the workload.

Pick the right tier for actual storage

Up to $15/month per tier reduced

If you use <10 GB total, Basic ($5/month) is cheaper than Standard ($20/month). For most teams with active CI, Standard's 100 GB allotment covers years of image history.

Skip Premium unless you need geo-replication

$30/month per non-Premium

Premium is 2.5x Standard's cost. Only justified if you need geo-replication, customer-managed keys, private endpoints, or content trust.

Set retention policies to expire old images

Storage overage avoided

Without retention, every CI build accumulates images forever. Setting retention_policy_in_days = 7 (Premium only feature) automatically deletes old untagged manifests.

Use multi-stage Dockerfiles

Storage cost

Smaller images mean less storage and faster pulls. Multi-stage builds drop dev dependencies and shrink images by 50-80%.

Build outside ACR for low-volume workloads

Build-volume dependent

ACR Tasks is convenient but builds on a self-hosted GitHub Actions runner or Azure DevOps agent can be cheaper for small teams already paying for those minutes.

FAQ

ACR or self-hosted Docker Registry?

ACR is right for any team running Azure workloads: integration with AKS, Azure DevOps, managed identities. Self-hosted Docker Registry on a VM can be cheaper but adds operational burden (TLS, auth, storage management, replication). Most teams find ACR worth the per-month cost.

How does c3x include geo-replication?

c3x reads the georeplications block on the resource and multiplies the Premium per-day rate by (1 + number of replica regions). The primary region is included in the base rate; each replica adds the full rate.

Does ACR pricing include bandwidth?

Pulls and pushes to/from within the same Azure region are free. Cross-region or internet bandwidth incurs standard Azure egress charges, separate from ACR.

What about ACR Tasks Quick Build?

ACR Quick Build (a one-off build via az acr build) bills the same as Tasks: per CPU-second. Convenient but watch volume; running quick builds in CI can add up.

Related resources

Estimate this resource in your own Terraform

Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including azurerm_container_registry.