Article guideContents, topics, tags, and RSS
Private container registries no longer have to be a separate paid service. The most practical free option is often already attached to the source-control or cloud platform you use.
Pricing, storage, transfer, pull-rate, and retention rules change. Treat this as a shortlist and confirm the linked provider documentation before choosing a registry for production.
Quick comparison
| Registry | Useful free option | Best fit | Important caveat |
|---|---|---|---|
| GitHub Container Registry | Private container images for GitHub users and organizations | Code and Actions already live on GitHub | GitHub currently treats container image storage and bandwidth specially; the billing policy can change with notice |
| Docker Hub | One private repository on the Personal plan | Simple Docker-first workflows | Pull limits and the single-private-repository limit matter |
| GitLab Container Registry | Registry integrated with GitLab projects | Source, CI/CD, and images in one GitLab project | Storage and transfer rules depend on the namespace and plan |
| Google Artifact Registry | A small monthly storage allowance before charges | Workloads already running in Google Cloud | Storage beyond the allowance, transfer, and scanning can cost money |
GitHub Container Registry
GitHub Container Registry is the natural default when the source repository and CI workflow are already on GitHub. Images use the ghcr.io host and package permissions can inherit access from a repository.
GitHub’s Packages billing documentation currently says Container Registry image storage and bandwidth are free, with notice before that policy changes. Do not assume that statement applies forever or to every other GitHub Packages format.
Choose it when:
- your source and automation already use GitHub;
- repository-linked permissions are useful;
- you do not need a registry that is independent of your source host.
Docker Hub
Docker Hub remains the most familiar registry for Docker tooling. The Personal plan includes one private repository, while authenticated and unauthenticated pulls are subject to usage limits documented by Docker.
Check the current Docker Hub usage and limits before designing a frequently pulled deployment around the free plan.
Choose it when:
- one private repository is enough;
- a Docker-native interface matters more than source-host integration;
- your expected pull volume fits the current limits.
GitLab Container Registry
GitLab Container Registry is available inside GitLab projects and works well with GitLab CI/CD. Keeping code, pipelines, permissions, and images in one project can be simpler than operating a separate registry.
GitLab’s quotas vary by offering and namespace. Review the current storage usage and quota documentation and the limits shown for your namespace instead of relying on an old fixed number.
Choose it when:
- the project already lives on GitLab;
- GitLab CI/CD builds the image;
- project-level permissions match the deployment model.
Google Artifact Registry
Google Artifact Registry supports Docker and other package formats. Its pricing page includes the first 0.5 GiB-month of storage at no charge, but additional storage, network transfer, and scanning can create costs.
Choose it when:
- the workload already runs in Google Cloud;
- integrated identity and regional repositories are worth the setup;
- you can monitor usage and billing rather than requiring a permanently free service.
How to choose
Start with operational fit, not the largest advertised allowance:
- Put images near the source and CI system that builds them.
- Confirm that your deployment platform can authenticate without long-lived personal credentials.
- Estimate stored image size, retention, transfer, and pull frequency.
- Configure deletion or retention rules for old tags.
- Recheck the provider’s limits before a production launch.
For most small GitHub-hosted projects, GitHub Container Registry is the simplest current choice. Docker Hub is convenient when one private repository is enough. GitLab and Google Artifact Registry make the most sense when the rest of the delivery workflow already lives on those platforms.
