Saltar al contenido

Cómo montar un registro privado de Docker en tu VPS

7 min de lectura Infraestructura
  • docker
  • registry
  • vps
  • seguridad
  • infraestructura
  • deploy

Propósito de un registro privado de Docker

Cuando trabajas con Docker, tus imágenes son el paquete que encapsula tu aplicación. Subirlas a Docker Hub es lo habitual, pero tiene sus limitaciones: la privacidad se resiente con imágenes públicas y los planes gratuitos imponen restricciones de descarga que pueden frenar un deploy continuo. Un registro privado de Docker en tu propio VPS te da el control total.

Mi regla es simple: si la imagen contiene código propietario o información sensible, no debería estar en un servicio público. Montar tu propio registro resuelve esto, te ofrece más seguridad y agiliza los despliegues internos. No es solo una cuestión de privacidad, es de soberanía sobre tu infraestructura.

La diferencia entre usar Docker Hub y un registro propio no es solo la etiqueta “privado”. Es la capacidad de gestionar tus políticas de seguridad, controlar el acceso y optimizar la velocidad de descarga de imágenes dentro de tu propia red. Además, te independizas de las políticas de uso de plataformas externas.

Cuando un cliente me llega con problemas de rendimiento en sus deploys o dudas sobre la seguridad de sus imágenes, la primera conversación es casi siempre sobre dónde están alojadas esas imágenes. Un registro local elimina un punto de fallo y una posible latencia externa.

Montar la base del registro con Docker Compose

La forma más sencilla de levantar un registro de Docker es usando Docker Compose. Esto nos permite definir el servicio, la persistencia de datos y, más adelante, la configuración de SSL y autenticación de forma declarativa. Empezaremos con una configuración básica, sin seguridad.

Crea un archivo docker-compose.yml con el siguiente contenido:

version: '3.8'
services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      - ./data:/var/lib/registry
    restart: always

Ejecuta docker compose up -d y tendrás tu registro básico en el puerto 5000 de tu VPS. Para persistir los datos de tus imágenes, es clave montar un volumen como /var/lib/registry, que es donde el registro guarda la información. Tengo un artículo sobre volúmenes Docker vs bind mounts que explica en detalle por qué esta elección es importante.

Añadir SSL con Traefik para un acceso seguro

Un registro sin HTTPS es un agujero de seguridad que no debes tolerar en producción. Docker no permite docker push ni docker pull desde un registro inseguro sin configuraciones adicionales que son un riesgo. Necesitas SSL.

La forma más robusta de añadir SSL es con un reverse proxy como Traefik, que puede gestionar certificados Let’s Encrypt automáticamente. Esto asegura que todo el tráfico hacia y desde tu registro esté cifrado. La configuración es similar a la que uso para gestionar certificados SSL automáticos con Let’s Encrypt y Traefik.

Tu docker-compose.yml se vería así (asumiendo que Traefik ya está funcionando y configurado para un dominio registry.tudominio.com):

version: '3.8'
services:
  registry:
    image: registry:2
    volumes:
      - ./data:/var/lib/registry
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.registry.rule=Host(`registry.tudominio.com`)"
      - "traefik.http.routers.registry.entrypoints=websecure"
      - "traefik.http.routers.registry.tls.certresolver=myresolver" # Asume un resolver configurado en Traefik
      - "traefik.http.services.registry.loadbalancer.server.port=5000"

Con esto, Traefik dirigirá el tráfico HTTPS a tu servicio de registro, y Let’s Encrypt se encargará de los certificados.

Autenticación básica para proteger el acceso

Una vez que tienes SSL, el siguiente paso es la autenticación. No quieres que cualquiera pueda subir o descargar imágenes de tu registro privado. La forma más sencilla es usar autenticación básica HTTP, que el propio servicio registry soporta.

Primero, crea un archivo htpasswd con tus credenciales. Necesitarás apache2-utils para esto:

sudo apt update
sudo apt install apache2-utils
htpasswd -Bc ./auth/htpasswd.users tu_usuario # Te pedira la contraseña

Luego, actualiza tu docker-compose.yml para incluir este archivo de autenticación:

version: '3.8'
services:
  registry:
    image: registry:2
    volumes:
      - ./data:/var/lib/registry
      - ./auth:/auth # Monta el directorio con htpasswd
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd.users
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.registry.rule=Host(`registry.tudominio.com`)"
      - "traefik.http.routers.registry.entrypoints=websecure"
      - "traefik.http.routers.registry.tls.certresolver=myresolver"
      - "traefik.http.services.registry.loadbalancer.server.port=5000"

Con docker compose up -d de nuevo, tu registro ahora pedirá usuario y contraseña. Para usarlo, deberás hacer docker login registry.tudominio.com y usar las credenciales que definiste.

Ventajas y consideraciones de un registro Docker privado

Montar tu propio docker registry es una decisión que tiene beneficios claros, pero también implicaciones.

  • Control total: Tus imágenes residen en tu infraestructura, bajo tus reglas de seguridad y disponibilidad.
  • Seguridad mejorada: Proteges tus imágenes propietarias de la exposición pública o de políticas de terceros.
  • Velocidad de deploy: Las descargas de imágenes para tus deploys internos pueden ser más rápidas al estar en tu propia red.
  • Mantenimiento: Eres responsable de la operación, los backups y las actualizaciones del registro.
  • Configuración inicial: Requiere un conocimiento técnico para asegurar SSL y autenticación correctamente.
  • Almacenamiento: Debes gestionar el espacio en disco de tu VPS para las imágenes.
  • SSL: Siempre debe estar en HTTPS. Nunca expongas un registro Docker sin cifrar.
  • Autenticación: Proteger el acceso es fundamental para la seguridad de tus imágenes.
  • Backups: Las imágenes son activos críticos. Mi regla es que un sistema sin backup verificado no es un sistema real.

Montar un registro privado de Docker en tu VPS te da una autonomía que los servicios de terceros no ofrecen. Te permite gestionar tus imágenes con la misma seriedad que el resto de tu infraestructura. Si planeas migrar un stack Docker a otro VPS sin downtime, tener un registro propio simplifica el proceso al mantener el control de tus imágenes. Y recuerda, no importa lo robusta que sea tu infraestructura, siempre necesitas backups automáticos verificados para cualquier componente crítico.

Lucas Juárez
Lucas Juárez

Técnico freelance especializado en desarrollo a medida, automatizaciones con IA y gestión técnica para negocios en España. Más sobre mí →

Compartir:

¿Necesitas que alguien se ocupe de tu web?

Me encargo de que tu web funcione, esté segura y actualizada. Backups, actualizaciones y soporte directo. Planes desde 49 €/mes.

Chat