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
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.