Public distribution or private deploys?
Docker Hub and Quay are strong for public images. GHCR, GitLab, ECR, Artifact Registry, and ACR fit better when images follow repository or cloud IAM permissions.
Container registries store the images that CI builds and production runtimes pull. The best free choice depends on whether the image is public, where it runs, how often it is pulled, and which permission model controls deployments.
| PROVIDER | FREE TIER | USAGE LIMIT | FEATURE SET | WORKSPACE LIMIT | KEY CONSTRAINTS | ACTION |
|---|---|---|---|---|---|---|
Docker HubDOCKER NATIVE REGISTRY | Docker Personal $0 | 1 private repo, unlimited public repos, 100 pulls/hr on Personal plan | Docker image hosting, official image ecosystem, webhooks, Docker Scout basics, and the widest client compatibility | Best for public images and personal projects that need Docker-native discovery | Pull-rate limits and one private repo make it risky for production private deploys | Go to Site ↗ |
GitHub Container RegistryGITHUB PACKAGES / GHCR | Public packages free; container storage and bandwidth currently free | Private packages use GitHub Packages quotas; Actions downloads from the same repo avoid transfer counting | OCI and Docker images, GITHUB_TOKEN auth, repository-linked permissions, Actions integration, and granular visibility | Best when source code and CI already live on GitHub | Private package quotas still matter, and public free container bandwidth is a current policy to verify before scale | Go to Site ↗ |
GitLab Container RegistryDEVSECOPS-INTEGRATED | GitLab Free integrated registry | Registry is built into projects; Git repository and LFS storage have 10 GiB Free-tier project limit | Project/group registry, OCI/Docker images, tags, permissions, cleanup policies, and GitLab CI integration | Best for GitLab-native CI/CD and project-level image permissions | Large image libraries require cleanup policies; project storage and registry behavior should be checked per namespace | Go to Site ↗ |
Amazon ECR PublicAWS PUBLIC REGISTRY | Free public transfer allowance | Authenticated public repositories include 5 TB/month internet transfer; new private ECR customers get 500 MB/month storage for one year | Public gallery, IAM auth, private ECR pairing, vulnerability scanning options, and strong AWS deployment fit | Best for images consumed by AWS workloads or public AWS-facing projects | Private ECR is not forever-free; storage and data transfer can bill after free tier or beyond allowances | Go to Site ↗ |
Google Artifact RegistryGCP ARTIFACT REGISTRY | 0.5 GB storage free tier | Free storage is shared at billing-account level across projects; storage, transfer, and scanning are billed separately | Docker/OCI images, language packages, remote and virtual repositories, IAM permissions, and Google Cloud deployment integration | Best for GCP-native deployments and mixed artifact types | Free tier is small; vulnerability scanning and egress can become the real cost boundary | Go to Site ↗ |
Quay.ioRED HAT QUAY | Free public repositories | Free tier focuses on public repositories; private repositories require paid plans or trials | Robot accounts, teams, access controls, repository automation, logs, and OCI image hosting | Useful for public OCI hosting with enterprise-oriented controls | Not a free private registry; plan paid usage for private team images | Go to Site ↗ |
Alibaba Cloud Container RegistryCHINA CLOUD REGISTRY | Personal Edition free | 3 namespaces, 300 public repositories, 1 concurrent build; one Personal Edition instance per Alibaba Cloud account | Image push/pull, automated builds, China-region access, Alibaba Cloud deployment integration | Best for individual China-region development and testing | No SLA and not recommended for production; Enterprise Edition is the production path | Go to Site ↗ |
Azure Container RegistryAZURE PRIVATE REGISTRY | No forever-free registry tier; Azure free account credit can apply | Basic tier includes 10 GB storage; standard networking and overage charges apply | Private registry, webhooks, Azure auth, Tasks builds, geo-replication on Premium, and Azure deployment integration | Best for Azure production workloads, not free-tier exploration | Treat as paid infrastructure; storage beyond included tier and egress are billable | Go to Site ↗ |
Choose Docker Hub when public discoverability and Docker-native pulls matter more than private registry capacity.
Choose GHCR when code, Actions, package permissions, and image publishing should follow the same GitHub repository model.
Choose ECR Public for images consumed heavily by AWS workloads or projects that need public AWS-aligned distribution.
Choose ACR Personal Edition for China-region development and testing, while keeping production on Enterprise Edition.
Docker Hub and Quay are strong for public images. GHCR, GitLab, ECR, Artifact Registry, and ACR fit better when images follow repository or cloud IAM permissions.
Pull latency, egress fees, and regional reliability improve when the registry is close to Kubernetes, serverless containers, or VM deployments.
Use immutable release tags, short-lived branch tags, cleanup policies, and vulnerability scanning gates before the registry grows messy.
Build caches are large and disposable. Production release images need stable tags, provenance, signing, and stricter permissions.
A free public registry can fail at the worst time if CI, autoscaling, or many servers pull the same base image repeatedly.
Each tag can keep layers alive. Without cleanup policies, old branch builds and caches quietly consume storage.
Even without secrets, public images can expose package versions, internal paths, build arguments, and operational assumptions.
Registry storage might be cheap while vulnerability scanning, signing, SBOM workflows, and policy enforcement become the real upgrade reason.
Build once in CI, tag with commit SHA and release version, push to registry, then deploy by immutable digest or tag.
Promote the same image from dev to staging to production instead of rebuilding per environment.
Keep reusable base images public when appropriate, but store app images with private permissions and deployment-scoped tokens.
Container registries usually sit directly behind build pipelines, scans, and deployment approvals.
Repository permissions often decide who can publish images, trigger builds, and approve releases.
Choose registry location based on where containers actually run and how often nodes pull images.
Docker Hub is the best discovery default, while GHCR works well when the image is tied to a GitHub repository. Quay.io is also useful for public OCI images with enterprise-style controls.
Use the registry closest to your runtime and permission system: GHCR for GitHub workflows, GitLab Registry for GitLab CI/CD, ECR for AWS, Artifact Registry for GCP, ACR for Alibaba Cloud China, and Azure Container Registry for Azure.
Only if the image is intentionally public. Public images can reveal package versions, build paths, labels, and operational assumptions. Private app images should use private registries and scoped deployment credentials.
Unexpected costs usually come from old tags, cache layers, multi-architecture images, vulnerability scanning, cross-region replication, and internet egress when deployments pull images frequently.
Keep immutable release tags, delete short-lived branch and pull-request tags, set retention policies, avoid latest-only deployments, and periodically verify which digests are still used in production.