Skip to content
BotServBotServ
DockerRegistryContainerAuto-alojamientoTLS

Alojar tu propio Docker Registry

Cómo hospedar Docker Registry localmente. Push, pull, autenticación, TLS y mejores prácticas.

S

schutzgeist

4 min read
Alojar tu propio Docker Registry

Ejecutar tu propia Docker Registry

Qué cubre este artículo sobre Docker Registry

  • Qué es una Docker Registry y cuándo vale la pena tener la propia.
  • Cómo ejecutar la Registry oficial de Docker.
  • Cómo hacer push y pull de imágenes.
  • Autenticación, TLS y seguridad.
  • Consejos para backups y mantenimiento.

Introducción: ejecutar tu propia Docker Registry

Una Docker Registry es un repositorio de almacenamiento para imágenes Docker. Por defecto, las imágenes provienen de Docker Hub, pero a veces necesitas distribuir imágenes personalizadas de forma local o dentro de tu red corporativa. Una Registry propia resulta útil para CI/CD, entornos aislados, privacidad de datos o cuando Docker Hub no debe estar disponible.

Este artículo te muestra cómo ejecutar la Registry oficial de Docker en local o en tu homelab.

Conceptos clave

  • Registry: almacenamiento de imágenes Docker.
  • Repository: colección de imágenes bajo un mismo nombre.
  • Tag: identificador de versión de una imagen.
  • Push: subida de una imagen a la Registry.
  • Pull: descarga de una imagen desde la Registry.
  • TLS: cifrado de la conexión.
  • Basic Auth: usuario y contraseña para el acceso.
  • Garbage Collection: limpieza de capas no referenciadas.

Cuándo tiene sentido una Registry propia

  • Distribuir imágenes personalizadas dentro de la red interna.
  • Acelerar pipelines de CI/CD.
  • Eludir las limitaciones de Docker Hub.
  • Evitar almacenar datos en registries públicas.
  • Abastecer entornos aislados (air-gapped).
  • Compartir caché de construcción entre hosts.

Iniciar la Registry

La Registry oficial se ejecuta como un contenedor simple:

docker run -d -p 5000:5000 --name registry registry:2

Prueba:

curl http://localhost:5000/v2/_catalog

Etiquetar e subir una imagen

Renombra una imagen existente y súbela:

docker tag mein-image:latest localhost:5000/mein-image:latest
docker push localhost:5000/mein-image:latest

Descargar una imagen

docker pull localhost:5000/mein-image:latest

Persistencia con volúmenes

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

Activar TLS

Para producción o acceso remoto, la Registry debe estar protegida con TLS. Puedes usar un certificado de una CA o un certificado autofirmado.

Certificado autofirmado

mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/registry.key -x509 -days 365 -out certs/registry.crt

Registry con certificado:

docker run -d -p 5000:5000 --name registry \
  -v $(pwd)/certs:/certs \
  -v registry-data:/var/lib/registry \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
  registry:2

En el cliente, el certificado debe ser aceptado:

mkdir -p /etc/docker/certs.d/localhost:5000
cp registry.crt /etc/docker/certs.d/localhost:5000/ca.crt

Autenticación

Una autenticación Basic Auth sencilla con htpasswd:

mkdir auth
docker run --rm --entrypoint htpasswd httpd:2 -Bbn admin meinpasswort > auth/htpasswd

Registry con autenticación:

docker run -d -p 5000:5000 --name registry \
  -v $(pwd)/auth:/auth \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v registry-data:/var/lib/registry \
  registry:2

Inicia sesión:

docker login localhost:5000

Registry con Compose

services:
  registry:
    image: registry:2
    container_name: registry
    ports:
      - "127.0.0.1:5000:5000"
    volumes:
      - registry-data:/var/lib/registry
      - ./certs:/certs
      - ./auth:/auth
    environment:
      - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt
      - REGISTRY_HTTP_TLS_KEY=/certs/registry.key
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
    restart: unless-stopped

volumes:
  registry-data:

Garbage Collection

Las capas no referenciadas pueden ocupar espacio en disco. Ejecuta una limpieza:

docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

Backup

Los datos de la Registry se encuentran en /var/lib/registry. Un backup simple:

docker run --rm -v registry-data:/data -v $(pwd):/backup alpine tar -czf /backup/registry-backup.tar.gz -C /data .

Seguridad

  • Usa siempre TLS para acceso remoto.
  • Activa autenticación.
  • Nunca expongas la Registry públicamente en internet.
  • Limita el acceso mediante VPN o Tailscale.
  • Aplica backups y actualizaciones de forma regular.
  • Habilita logging.

Problemas comunes

  • Sin TLS: Docker bloquea registries inseguras en versiones recientes.
  • Registry insegura: es posible, pero no recomendado.
  • Nombres de tags incorrectos: el nombre de la imagen debe incluir el host de la Registry.
  • Autenticación no configurada: el push se rechaza sin credenciales.
  • Disco lleno: falta realizar Garbage Collection.
  • Certificado no confiable: el cliente necesita el certificado CA.

Enlaces y recursos adicionales

FAQ: Docker Registry

¿Necesito una Registry propia? Si distribuyes muchas imágenes personalizadas internamente, sí. Para imágenes ocasionales, Docker Hub es suficiente.

¿Puedo hacerla pública? Solo con TLS, autenticación y rate limiting. Es mejor mantenerla interna.

¿Es escalable la Registry? Para configuraciones pequeñas, un contenedor único es suficiente. Para escenarios más grandes, existen Distribution o Harbor.

¿Cómo elimino imágenes antiguas? A través de la API o Garbage Collection. Los tags individuales se pueden eliminar mediante la API de la Registry.

¿Qué es Harbor? Un proyecto open-source de Registry avanzada con interfaz gráfica, autenticación y escaneo de seguridad.

Fuentes y lecturas recomendadas

Resumen: ejecutar tu propia Docker Registry

Una Docker Registry propia te permite distribuir imágenes de forma local o dentro de tu red corporativa. Se inicia rápidamente como contenedor, pero para producción o acceso remoto debe estar protegida con TLS y autenticación. Son importantes los nombres de tags limpios, backups periódicos, Garbage Collection y acceso restringido a la red. Si operas la Registry correctamente, ahorras ancho de banda, aceleras deployments y mantienes el control sobre tus imágenes personalizadas.

Volver al blog
Share:

Entradas relacionadas