#!/bin/bash set -e # Configuration REGISTRY_DATA="/opt/infra/registry/data/docker/registry/v2" KEEP_TAGS=5 echo "๐Ÿฅ Starting Registry & Docker Maintenance..." # 1. Prune Registry Tags (Filesystem level) # This identifies main-* tags and keeps only the latest N for repo_dir in "$REGISTRY_DATA/repositories/mintel/"*; do repo_name=$(basename "$repo_dir") tags_dir="$repo_dir/_manifests/tags" if [ -d "$tags_dir" ]; then echo "๐Ÿ” Processing repository: mintel/$repo_name" # Get main-* tags sorted by modification time (newest first) main_tags=$(ls -dt "$tags_dir"/main-* 2>/dev/null || true) count=0 for tag_path in $main_tags; do ((++count)) if [ $count -gt $KEEP_TAGS ]; then echo " ๐Ÿ—‘๏ธ Deleting old tag: $(basename "$tag_path")" rm -rf "$tag_path" fi done fi done # 2. Run Garbage Collection echo "โ™ป๏ธ Running Registry Garbage Collection..." docker exec registry-registry-1 bin/registry garbage-collect /etc/docker/registry/config.yml # 3. Prune Host Docker resources echo "๐Ÿงน Pruning Host Docker resources..." # Separate prune commands because --filter and --volumes can be incompatible on some versions docker system prune -af --filter "until=168h" docker volume prune -f echo "โœ… Maintenance complete!" df -h /