container-registries

Store, manage, and distribute container images across cloud and self-hosted registries.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "container-registries" with this command: npx skills add bagelhole/devops-security-agent-skills/bagelhole-devops-security-agent-skills-container-registries

Container Registries

Store, manage, and distribute container images across cloud and self-hosted registries.

When to Use This Skill

Use this skill when:

  • Pushing and pulling container images

  • Configuring registry authentication

  • Setting up image retention policies

  • Managing private container registries

  • Implementing image scanning and security

Prerequisites

  • Docker or Podman installed

  • Cloud CLI tools (AWS CLI, az, gcloud) for respective registries

  • Appropriate IAM permissions

Docker Hub

Authentication

Login

docker login

Login with token

echo "$DOCKER_TOKEN" | docker login -u username --password-stdin

Push/Pull Images

Tag image

docker tag myapp:latest username/myapp:latest

Push

docker push username/myapp:latest

Pull

docker pull username/myapp:latest

Automated Builds

Configure in Docker Hub UI:

  • Connect GitHub/Bitbucket repository

  • Set build rules (branch → tag mapping)

  • Configure build context and Dockerfile path

Amazon ECR

Setup

Create repository

aws ecr create-repository
--repository-name myapp
--image-scanning-configuration scanOnPush=true
--encryption-configuration encryptionType=AES256

Get registry URI

REGISTRY=$(aws ecr describe-repositories
--repository-names myapp
--query 'repositories[0].repositoryUri'
--output text | cut -d'/' -f1)

Authentication

Login (Docker)

aws ecr get-login-password --region us-east-1 |
docker login --username AWS --password-stdin $REGISTRY

Login with credential helper

Add to ~/.docker/config.json:

{ "credHelpers": { "123456789.dkr.ecr.us-east-1.amazonaws.com": "ecr-login" } }

Push/Pull

Tag and push

docker tag myapp:latest $REGISTRY/myapp:latest docker push $REGISTRY/myapp:latest

Pull

docker pull $REGISTRY/myapp:latest

Lifecycle Policy

Create lifecycle policy

aws ecr put-lifecycle-policy
--repository-name myapp
--lifecycle-policy-text '{ "rules": [ { "rulePriority": 1, "description": "Keep last 10 images", "selection": { "tagStatus": "any", "countType": "imageCountMoreThan", "countNumber": 10 }, "action": { "type": "expire" } } ] }'

Repository Policy

Allow cross-account access

aws ecr set-repository-policy
--repository-name myapp
--policy-text '{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPull", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::OTHER_ACCOUNT:root" }, "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ] } ] }'

Azure Container Registry (ACR)

Setup

Create registry

az acr create
--resource-group mygroup
--name myregistry
--sku Standard
--admin-enabled false

Get login server

az acr show --name myregistry --query loginServer -o tsv

Authentication

Login with Azure CLI

az acr login --name myregistry

Login with service principal

docker login myregistry.azurecr.io
-u $SP_APP_ID
-p $SP_PASSWORD

Get access token

az acr login --name myregistry --expose-token

Push/Pull

Tag and push

docker tag myapp:latest myregistry.azurecr.io/myapp:latest docker push myregistry.azurecr.io/myapp:latest

ACR Build (build in cloud)

az acr build
--registry myregistry
--image myapp:latest
--file Dockerfile .

Retention Policy

Enable retention policy

az acr config retention update
--registry myregistry
--status enabled
--days 30
--type UntaggedManifests

Geo-Replication

Enable replication

az acr replication create
--registry myregistry
--location westeurope

List replications

az acr replication list --registry myregistry

Google Container Registry (GCR) / Artifact Registry

Setup (Artifact Registry)

Create repository

gcloud artifacts repositories create myrepo
--repository-format=docker
--location=us-central1
--description="Docker repository"

Authentication

Configure Docker auth

gcloud auth configure-docker us-central1-docker.pkg.dev

Or use credential helper

gcloud auth print-access-token |
docker login -u oauth2accesstoken --password-stdin
https://us-central1-docker.pkg.dev

Push/Pull

Tag for Artifact Registry

docker tag myapp:latest
us-central1-docker.pkg.dev/PROJECT_ID/myrepo/myapp:latest

Push

docker push us-central1-docker.pkg.dev/PROJECT_ID/myrepo/myapp:latest

Pull

docker pull us-central1-docker.pkg.dev/PROJECT_ID/myrepo/myapp:latest

Cleanup Policy

Create cleanup policy

gcloud artifacts repositories set-cleanup-policies myrepo
--location=us-central1
--policy=policy.json

policy.json

{ "name": "delete-old", "action": {"type": "Delete"}, "condition": { "olderThan": "30d", "tagState": "untagged" } }

GitHub Container Registry (GHCR)

Authentication

Login with PAT

echo "$GITHUB_TOKEN" | docker login ghcr.io -u USERNAME --password-stdin

Push/Pull

Tag

docker tag myapp:latest ghcr.io/OWNER/myapp:latest

Push

docker push ghcr.io/OWNER/myapp:latest

Pull

docker pull ghcr.io/OWNER/myapp:latest

Visibility Settings

Configure in GitHub:

  • Go to package settings

  • Change visibility (public/private)

  • Manage access for teams/users

Self-Hosted Registry

Deploy with Docker

Run registry

docker run -d -p 5000:5000
--name registry
-v registry-data:/var/lib/registry
registry:2

Configure TLS

docker run -d -p 443:5000
--name registry
-v /certs:/certs
-v registry-data:/var/lib/registry
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key
registry:2

Harbor Registry

Download Harbor

wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz tar xzvf harbor-online-installer-v2.9.0.tgz

Configure harbor.yml

Set hostname, https certificate, admin password

Install

./install.sh --with-trivy --with-chartmuseum

Image Security

Vulnerability Scanning

ECR - Enable scan on push

aws ecr put-image-scanning-configuration
--repository-name myapp
--image-scanning-configuration scanOnPush=true

Get scan results

aws ecr describe-image-scan-findings
--repository-name myapp
--image-id imageTag=latest

ACR - Scan with Defender

az acr task create
--registry myregistry
--name scan-images
--cmd "mcr.microsoft.com/azure-cli az acr run-scan"

Image Signing

Enable content trust

export DOCKER_CONTENT_TRUST=1

Sign image on push

docker push myregistry/myapp:latest

Verify signature

docker trust inspect myregistry/myapp:latest

Common Issues

Issue: Authentication Expired

Problem: Push/pull fails with auth error Solution: Re-run login command, check credential helper

Issue: Image Not Found

Problem: Pull fails with manifest unknown Solution: Verify tag exists, check registry URL

Issue: Push Permission Denied

Problem: Cannot push to repository Solution: Check IAM permissions, verify repository exists

Issue: Rate Limiting (Docker Hub)

Problem: Too many requests error Solution: Authenticate for higher limits, use pull-through cache

Best Practices

  • Enable vulnerability scanning on all repositories

  • Implement lifecycle policies to manage storage costs

  • Use immutable tags for production images

  • Configure cross-region replication for availability

  • Use service accounts/principals for CI/CD authentication

  • Enable audit logging for compliance

  • Implement image signing for supply chain security

  • Use pull-through cache to avoid rate limits

Related Skills

  • docker-management - Building images

  • container-scanning - Security scanning

  • aws-iam - AWS permissions

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Security

sops-encryption

No summary provided by upstream source.

Repository SourceNeeds Review
Security

linux-administration

No summary provided by upstream source.

Repository SourceNeeds Review
Security

linux-hardening

No summary provided by upstream source.

Repository SourceNeeds Review
Security

vpn-setup

No summary provided by upstream source.

Repository SourceNeeds Review