# documentation: https://distribution.github.io/distribution/
# slogan: The Docker Registry lets you distribute Docker images.
# category: devtools
# tags: registry,images,docker
# logo: svgs/docker-registry.png
# port: 5000

services:
  registry:
    image: registry:3
    environment:
      - SERVICE_URL_REGISTRY_5000
      - USERNAME=${SERVICE_USER_REGISTRY}
      - PASSWORD=${SERVICE_PASSWORD_REGISTRY}
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password
    command: ["/entrypoint.sh"]
    volumes:
      - registry-data:/var/lib/registry
      - type: bind
        source: ./etc/entrypoint.sh
        target: /entrypoint.sh
        mode: "0755"
        content: |
          #!/usr/bin/env sh
          set -e 

          if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
              echo "Error: USERNAME and PASSWORD environment variables must be set"
              exit 1
          fi

          apk add --no-cache apache2-utils
          mkdir -p "$(dirname "$REGISTRY_AUTH_HTPASSWD_PATH")"
          chmod 755 "$(dirname "$REGISTRY_AUTH_HTPASSWD_PATH")"
          htpasswd -Bbc "$REGISTRY_AUTH_HTPASSWD_PATH" "$USERNAME" "$PASSWORD"
          registry serve /etc/docker/registry/config.yml
      - type: bind
        source: ./config/config.yml
        target: /etc/docker/registry/config.yml
        isDirectory: false
        content: >-
          version: 0.1

          log:
            fields:
              service: registry
          storage:
            cache:
              blobdescriptor: inmemory
            filesystem:
              rootdirectory: /var/lib/registry
          http:
            addr: :5000
            headers:
              X-Content-Type-Options: [nosniff]
          health:
            storagedriver:
              enabled: true
              interval: 10s
              threshold: 3
    healthcheck:
      test:
        - CMD
        - wget
        - "-q"
        - "--spider"     
        - "http://localhost:5000/"  
      interval: 5s
      timeout: 20s
      retries: 10
