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