Docker Registry Guide

Core Registry Commands

# Login to Docker Hub docker login docker login -u myuser -p mypassword # Login to private registry docker login registry.example.com # Pull image docker pull nginx:1.25-alpine docker pull registry.example.com/myapp:v1.2.3 # Tag image docker tag myapp:latest registry.example.com/team/myapp:v1.2.3 docker tag myapp:latest registry.example.com/team/myapp:latest # Push image docker push registry.example.com/team/myapp:v1.2.3 docker push registry.example.com/team/myapp:latest # Inspect remote image metadata (no pull) docker manifest inspect registry.example.com/myapp:v1.2.3 # Logout docker logout registry.example.com

AWS ECR

# Authenticate to ECR (token valid 12h) aws ecr get-login-password --region us-east-1 | \ docker login --username AWS --password-stdin \ 123456789012.dkr.ecr.us-east-1.amazonaws.com # Create repository aws ecr create-repository \ --repository-name my-app \ --image-scanning-configuration scanOnPush=true \ --encryption-configuration encryptionType=AES256 # Tag and push docker tag my-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest # Set lifecycle policy (keep last 10 images) aws ecr put-lifecycle-policy \ --repository-name my-app \ --lifecycle-policy-text '{"rules":[{"rulePriority":1,"description":"Keep last 10","selection":{"tagStatus":"any","countType":"imageCountMoreThan","countNumber":10},"action":{"type":"expire"}}]}'

GCP Artifact Registry & GCR

# Configure Docker to use gcloud credentials gcloud auth configure-docker us-central1-docker.pkg.dev # Create Artifact Registry repository gcloud artifacts repositories create my-repo \ --repository-format=docker \ --location=us-central1 \ --description="My Docker images" # Tag and push to Artifact Registry docker tag my-app:latest us-central1-docker.pkg.dev/my-project/my-repo/my-app:v1.0 docker push us-central1-docker.pkg.dev/my-project/my-repo/my-app:v1.0 # Legacy GCR (still works) gcloud auth configure-docker gcr.io docker tag my-app:latest gcr.io/my-project/my-app:v1.0 docker push gcr.io/my-project/my-app:v1.0

Azure Container Registry (ACR)

# Create ACR az acr create \ --name myregistry \ --resource-group myRG \ --sku Basic \ --admin-enabled true # Login to ACR az acr login --name myregistry # Build and push directly in ACR (no local Docker needed) az acr build \ --registry myregistry \ --image myapp:v1.0 \ --file Dockerfile . # Import image from Docker Hub az acr import \ --name myregistry \ --source docker.io/library/nginx:latest \ --image nginx:latest # List images az acr repository list --name myregistry --output table az acr repository show-tags --name myregistry --repository myapp

Image Tagging Strategies

StrategyExample TagsUse Case
Semantic versioningv1.2.3, v1.2, v1, latestStable releases
Git SHAabc1234, git-abc1234ef56Immutable, traceable
Build numberbuild-1234, 1234CI systems
Branch+SHAmain-abc1234, feature-xyz-def456Pre-release testing
Date20240115, 2024.01.15Nightly builds

Multi-Architecture Images

# Create and push multi-arch manifest docker buildx create --use docker buildx build \ --platform linux/amd64,linux/arm64 \ --tag registry.example.com/myapp:v1.0 \ --push . # Inspect manifest list docker manifest inspect registry.example.com/myapp:v1.0 # Pull for specific platform docker pull --platform linux/arm64 registry.example.com/myapp:v1.0