Desplegar un servidor de Imagenes Docker con autenticación de usuario y contraseña con Docker Registry

Tiempo de lectura: 2 minutos

Hola, hoy vamos a ver como crear una imagen de Docker Compose que contenga un Docker Registry y nos permita autenticarnos en el sistema previamente para que nuestras imágenes no sean públicas.

Lo primero que vamos a hacer es crear este docker-compose.yml

version: '3.3'
services:
    docker-registry:
        ports:
            - '5000:5000'
        container_name: docker-registry
        build:
            context: .
            dockerfile: Dockerfile
        restart: always
        volumes:
            - './registry:/var/lib/registry'
        environment:
            REGISTRY_AUTH: htpasswd
            REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry-auth.htpasswd
            REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm

En este docker compose hemos creado una imagen que se generará a partir de un dockerfile que indicaré a continuación. Además, hemos creado 3 variables para permitir la autenticación.

Ahora vamos a crear el Dockerfile con este contenido:

# Use una imagen base de Docker Registry
FROM registry:2

# Copia el archivo de contraseñas htpasswd al contenedor (se genera con htpasswd -Bc registry-auth.htpasswd user (instalar antes apache2-utils))
COPY registry-auth.htpasswd /auth/registry-auth.htpasswd

# Configura las variables de entorno para habilitar la autenticación básica
ENV REGISTRY_AUTH=htpasswd
ENV REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry-auth.htpasswd
ENV REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm"

Ahora genera una imagen con la base de registry:2 y copia un archivo llamado registry-auth.htpasswd al contenedor interno. Además, genera las variables de entorno para permitir la autenticación.

Ahora tenemos que generar nuestro registry-auth.htpasswd.

Para generar este archivo tenemos que instalar en Ubuntu o Linux externo apache2-utils

sudo apt-get install -y apache2-utils

Una vez instalado ejecutamos este comando:

htpasswd -Bc registry-auth.htpasswd user

Dónde pone user, indicamos nuestro usuario.

Ahora nos habrá creado un archivo llamado registry-auth.htpasswd, si queremos generar mas usuarios tenemos que usar el comando sin flags:

htpasswd registry-auth.htpasswd user2

Al utilizar este comando se nos pedirá la contraseña que queremos introducir.

Ahora copiamos este archivo lo ponemos en raíz (al lado del archivo Dockerfile creado).

Y lanzamos el docker compose:

docker compose up -d

Ahora, una vez lanzado, nos requerirá autenticación para descargar las imagenes etc…

Para añadir la autenticación a Docker, tenemos que ejecutar lo siguiente:

docker login localhost:5000

Nos solicitará usuario y contraseña.

Una vez iniciada sesión ya podemos ejecutar nuestros comandos.

Ejemplo:

version: '3.1'
services:
  mi-imagen-personalizada:
    image: localhost:5000/mi-imagen-personalizada:1.0

Para listar las imagenes puedes usar:

curl -u usuario:contraseña -X GET http://localhost:5000/v2/_catalog
curl -u usuario:contraseña -X GET http://localhost:5000/v2/mi-imagen-personalizada/tags/list

Si queremos salir del inicio de sesión debemos poner este comando:

docker logout localhost:5000

Deja un comentario