Implementación de un registro privado de imágenes con Docker

Introducción

En entornos empresariales, depender únicamente de repositorios públicos como Docker Hub puede generar inconvenientes de rendimiento y seguridad. Una alternativa es desplegar un registry privado dentro de la red interna para almacenar y distribuir imágenes de forma controlada.

A continuación se describe el proceso completo de instalación y verificación de un registry local basado en la imagen oficial registry:2.

Paso 1: Descargar la imagen del registry

Primero se obtiene la imagen oficial desde Docker Hub:

docker pull registry:2

Paso 2: Configurar Docker para aceptar el registry privado

Es necesario indicar al demonio de Docker que el registry interno no utiliza HTTPS. Para ello se edita el archivo de configuración general:

sudo nano /etc/docker/daemon.json

Se añade la siguiente estructura, adaptando la dirección IP al servidor correspondiente:

{
  "insecure-registries": ["192.168.1.100:5000"]
}

Después se reinicia el servicio para aplicar los cambios:

sudo systemctl daemon-reload
sudo systemctl restart docker

Paso 3: Crear y ejecutar el contenedro del registry

Se inicia el servicio exponiendo el puerto 5000 y utilizando un volumen persistente para conservar las imágenes:

docker run -d \
  -p 5000:5000 \
  --name mi-registry \
  --restart unless-stopped \
  -v registry-vol:/var/lib/registry \
  registry:2
  • -d: ejecuta el contenedor en segundo plano.
  • -p: mapea el puerto del host con el del contenedor.
  • --name: asigna un nombre identificativo al contenedor.
  • --restart unless-stopped: mantiene el contenedor activo tras reinicios del sistema.
  • -v: monta un volumen para persistir los datos del registry.

Paso 4: Verificar que el registry está operativo

Se puede comprobar el catálogo accediendo a la API del registry:

curl http://192.168.1.100:5000/v2/_catalog

Si no se obtiene respuesta, conviene revisar el estado del cortafuegos y, en caso necesario, detenerlo temporalmente:

sudo systemctl stop firewalld

Paso 5: Subir una imagen al registry privado

Como ejemplo se utiliza la imagen de Alpine. Primero se descraga y se etiqueta para el registry interno:

docker pull alpine:latest
docker tag alpine:latest 192.168.1.100:5000/alpine:v1.0
docker push 192.168.1.100:5000/alpine:v1.0

Tras la subida, se puede confirmar que la imagen aparece en el catálogo:

curl http://192.168.1.100:5000/v2/_catalog

Paso 6: Descargar una imagen desde el registry privado

En cualquier otra máquina configurada con el mismo parámetro insecure-registries, se ejecuta:

docker pull 192.168.1.100:5000/alpine:v1.0

Si durante la descarga aparece un error relacionado con HTTPS en lugar de HTTP, se debe asegurar que el archivo /etc/docker/daemon.json incluya la IP y puerto correctos del registry, y luego reiniciar Docker:

echo '{"insecure-registries":["192.168.1.100:5000"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

Etiquetas: Docker Registry linux docker-daemon Container-Images

Publicado el 9-20 01:15