📖 Documentación de la API

Esta documentación describe los endpoints de la API HTTP v2 del Docker Registry que utiliza esta interfaz web.

Base URL

Todos los endpoints están basados en: http://tu-registry.com:5000/v2

🔐 Autenticación

La API utiliza autenticación HTTP Basic. Todas las peticiones deben incluir el header:

Authorization: Basic base64(username:password)

📋 Endpoints Principales

GET Ping Registry

/v2/

Verifica que el registry esté disponible y funcionando.

curl -X GET http://mi-registro.com:5000/v2/ \\
  -H "Authorization: Basic $(echo -n user:pass | base64)"
Respuesta: HTTP 200 OK

GET Listar Repositorios

/v2/_catalog

Obtiene la lista completa de repositorios disponibles en el registry.

curl -X GET http://mi-registro.com:5000/v2/_catalog \\
  -H "Authorization: Basic $(echo -n user:pass | base64)"
Respuesta JSON:
{
  "repositories": [
    "mi-app",
    "nginx-custom",
    "api-backend"
  ]
}

GET Listar Tags

/v2/{repository}/tags/list

Obtiene todas las etiquetas (tags) disponibles para un repositorio específico.

curl -X GET http://mi-registro.com:5000/v2/mi-app/tags/list \\
  -H "Authorization: Basic $(echo -n user:pass | base64)"
Respuesta JSON:
{
  "name": "mi-app",
  "tags": [
    "latest",
    "v1.0.0",
    "v1.1.0",
    "develop"
  ]
}

HEAD Obtener Digest

/v2/{repository}/manifests/{tag}

Obtiene el digest (hash) de una imagen específica, necesario para eliminarla.

curl -I -X GET http://mi-registro.com:5000/v2/mi-app/manifests/latest \\
  -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \\
  -H "Authorization: Basic $(echo -n user:pass | base64)"
Header de respuesta:
Docker-Content-Digest: sha256:abc123def456...

DELETE Eliminar Imagen

/v2/{repository}/manifests/{digest}

Elimina una imagen usando su digest. Requiere que el registry tenga habilitado el delete.

curl -X DELETE http://mi-registro.com:5000/v2/mi-app/manifests/sha256:abc123... \\
  -H "Authorization: Basic $(echo -n user:pass | base64)"
Respuesta: HTTP 202 Accepted

⚙️ Configuración del Registry

Para que todas las funcionalidades trabajen correctamente, tu Docker Registry debe estar configurado con:

# config.yml
version: 0.1
log:
  fields:
    service: registry

storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true  # ⚠️ REQUERIDO para eliminar imágenes

http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    # CORS para la UI web
    Access-Control-Allow-Origin: ['*']
    Access-Control-Allow-Methods: ['HEAD','GET','OPTIONS','DELETE']
    Access-Control-Allow-Headers: ['Authorization','Accept','Cache-Control']

health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

🚀 Comandos Docker

Comandos útiles basados en tu documentación original:

📦 Subir Imagen
# 1. Etiquetar la imagen local
docker tag mi-imagen:latest mi-registro.com:5000/mi-imagen:latest

# 2. Hacer login (si es necesario)
docker login mi-registro.com:5000

# 3. Subir la imagen
docker push mi-registro.com:5000/mi-imagen:latest
🗑️ Garbage Collection
# Ejecutar garbage collection en el contenedor
docker exec -it registry-container bin/registry garbage-collect /etc/docker/registry/config.yml

# Ver logs del registry
docker logs registry-container
🔍 Inspección Manual
# Ver estructura en el host
ls /var/lib/registry/docker/registry/v2/repositories

# Inspeccionar contenido específico
find /var/lib/registry -name "*.json" | head -5

❗ Códigos de Estado HTTP

Código Estado Descripción
200 OK Petición exitosa
202 Accepted Eliminación aceptada
401 Unauthorized Credenciales inválidas
404 Not Found Repositorio o tag no encontrado
405 Method Not Allowed DELETE no habilitado en el registry

🛡️ Seguridad

Recomendaciones de Seguridad

  • Usa HTTPS en producción
  • Implementa autenticación robusta
  • Limita el acceso DELETE solo a usuarios autorizados
  • Monitorea los logs del registry regularmente
  • Realiza backups periódicos del storage