When working with Docker in a team or enterprise environment, you often need to share your container images securely. That’s where private Docker repositories come in. Instead of pushing to the public Docker Hub, you can store images in your own private registry.
In this post, you’ll learn step-by-step how to tag and push a Docker image to a private repository like Docker Hub, AWS ECR, GitHub Container Registry, or a custom registry.
📦 What Is a Private Docker Repository?
A private repository is a container registry where your images are only accessible to authenticated users. This is useful for:
- Internal tools
- Proprietary apps
- Staging environments
- Secure CI/CD pipelines
Examples include:
- Docker Hub (private repos)
- Amazon ECR (Elastic Container Registry)
- GitHub Container Registry
- Google Artifact Registry
- Self-hosted registries (Harbor, JFrog Artifactory)
✅ Step-by-Step: Pushing a Docker Image to a Private Repository
Let’s walk through an example using Docker Hub’s private repository (the process is similar for others).
1. 🔐 Log In to the Private Registry
First, you need to authenticate:
docker login myregistry.example.com
For Docker Hub:
docker login
You’ll be prompted to enter your username and password or personal access token.
2. 🏷️ Tag Your Image with the Repository Name
Your image must be tagged with the full repository path including the registry and username/namespace.
docker tag my-image:latest myregistry.example.com/myusername/my-image:latest
For Docker Hub:
docker tag my-image:latest myusername/my-image:latest
3. 📤 Push the Image
Now push the image to your private repository:
docker push myregistry.example.com/myusername/my-image:latest
For Docker Hub:
docker push myusername/my-image:latest
If authentication and permissions are correct, your image will upload to the private repository.
4. ✅ Verify the Push
Log into your container registry’s web interface or run:
docker pull myregistry.example.com/myusername/my-image:latest
to verify that the image is publicly accessible only with credentials.
🛠️ Example: Push to GitHub Container Registry
# Authenticate using a personal access token
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
# Tag image
docker tag my-app:latest ghcr.io/USERNAME/my-app:latest
# Push image
docker push ghcr.io/USERNAME/my-app:latest
📌 Best Practices
- ✅ Use meaningful tags (
v1.0.0
,latest
,staging
, etc.) - 🔒 Avoid hardcoding credentials—use environment variables or secrets
- 📁 Automate pushes using CI/CD tools (GitHub Actions, Jenkins, GitLab CI)
- 🧪 Use
docker inspect
ordocker image ls
to verify tag changes
🧠 Conclusion
Pushing Docker images to a private repository is essential for modern DevOps and secure application development. Just follow these basic steps:
- Login
- Tag your image properly
- Push it to the right destination
With this workflow, your containers will be safe, versioned, and shareable only with the right team members.