version: '3.8' services: # Docker Registry with Cache Configuration registry-cache: image: registry:2 container_name: site11_registry_cache restart: always ports: - "5000:5000" environment: # Registry configuration REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry REGISTRY_HTTP_ADDR: 0.0.0.0:5000 # Enable proxy cache for Docker Hub REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io REGISTRY_PROXY_USERNAME: ${DOCKER_HUB_USER:-} REGISTRY_PROXY_PASSWORD: ${DOCKER_HUB_PASSWORD:-} # Cache configuration REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: inmemory REGISTRY_STORAGE_DELETE_ENABLED: "true" # Garbage collection REGISTRY_STORAGE_GC_ENABLED: "true" REGISTRY_STORAGE_GC_INTERVAL: 12h # Performance tuning REGISTRY_HTTP_SECRET: ${REGISTRY_SECRET:-registrysecret} REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED: "true" volumes: - registry-cache-data:/var/lib/registry - ./registry/config.yml:/etc/docker/registry/config.yml:ro networks: - site11_network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5000/v2/"] interval: 30s timeout: 10s retries: 3 # Harbor - Enterprise-grade Registry with Cache (Alternative) harbor-registry: image: goharbor/harbor-core:v2.9.0 container_name: site11_harbor profiles: ["harbor"] # Only start with --profile harbor environment: HARBOR_ADMIN_PASSWORD: ${HARBOR_ADMIN_PASSWORD:-Harbor12345} HARBOR_DB_PASSWORD: ${HARBOR_DB_PASSWORD:-Harbor12345} # Enable proxy cache HARBOR_PROXY_CACHE_ENABLED: "true" HARBOR_PROXY_CACHE_ENDPOINT: https://registry-1.docker.io ports: - "8880:8080" - "8443:8443" volumes: - harbor-data:/data - harbor-config:/etc/harbor networks: - site11_network # Sonatype Nexus - Repository Manager with Docker Registry (Alternative) nexus: image: sonatype/nexus3:latest container_name: site11_nexus profiles: ["nexus"] # Only start with --profile nexus ports: - "8081:8081" # Nexus UI - "8082:8082" # Docker hosted registry - "8083:8083" # Docker proxy registry (cache) - "8084:8084" # Docker group registry volumes: - nexus-data:/nexus-data environment: NEXUS_CONTEXT: / INSTALL4J_ADD_VM_PARAMS: "-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g" networks: - site11_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8081/"] interval: 30s timeout: 10s retries: 3 # Redis for registry cache metadata (optional enhancement) registry-redis: image: redis:7-alpine container_name: site11_registry_redis profiles: ["registry-redis"] volumes: - registry-redis-data:/data networks: - site11_network command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 volumes: registry-cache-data: driver: local harbor-data: driver: local harbor-config: driver: local nexus-data: driver: local registry-redis-data: driver: local networks: site11_network: external: true