* Práctica 2.1: Aplicación Guestbook
Relación 2.1¶
Descripción¶
Actividad: Despliegue de la aplicación Guestbook
En esta práctica desplegarás una aplicación web completa que requiere de dos servicios para su funcionamiento: un servidor web y una base de datos. Aplicarás los conceptos de redes, volúmenes y variables de entorno en Docker para crear un entorno multi-contenedor funcional.
Objetivo general¶
Aprender a:
- Desplegar aplicaciones multi-contenedor usando Docker.
- Configurar redes Docker para la comunicación entre contenedores.
- Utilizar volúmenes para la persistencia de datos.
- Configurar aplicaciones mediante variables de entorno.
- Comprender la resolución DNS entre contenedores.
Contexto de trabajo¶
La aplicación Guestbook es una aplicación web desarrollada en Python que permite a los usuarios y usuarias dejar mensajes en un libro de visitas. La arquitectura de la aplicación consta de:
- Servicio web: Aplicación Guestbook que escucha en el puerto 5000/tcp.
- Servicio de base de datos: Redis (base de datos no relacional) que utiliza el puerto 6379/tcp.
Imágenes Docker a utilizar:
iesgn/guestbook- Aplicación web Guestbookredis- Base de datos Redis
🔹 Parte 1: Despliegue básico de Guestbook¶
Tarea 1.1: Preparación del entorno¶
-
Crea una red Docker personalizada llamada
red_guestbookque permita la comunicación entre los contenedores. -
Investiga en Docker Hub la documentación de la imagen
redispara comprender:- Qué puerto utiliza por defecto.
- Cómo habilitar la persistencia de datos (modo append-only).
- Qué directorio utiliza para almacenar los datos.
Tarea 1.2: Despliegue del servicio de base de datos¶
-
Crea un contenedor con la base de datos Redis con las siguientes características:
- Nombre del contenedor:
redis - Conectado a la red
red_guestbook - Configurado para persistencia de datos en el directorio
/datadel contenedor - Volumen montado desde
/opt/redis_datadel host (crea este directorio previamente) - Ejecutando en modo daemon (segundo plano)
- Nombre del contenedor:
-
Verifica que el contenedor está en ejecución correctamente.
Tarea 1.3: Despliegue del servicio web¶
-
Despliega la aplicación Guestbook con las siguientes características:
- Nombre del contenedor:
guestbook - Conectado a la red
red_guestbook - Puerto 80 del host mapeado al puerto 5000 del contenedor
- Ejecutando en modo daemon
- Nombre del contenedor:
-
Accede a la aplicación desde tu navegador web (http://localhost).
-
Añade varios mensajes en el libro de visitas.
Tarea 1.4: Verificación de la persistencia¶
-
Detén y elimina el contenedor
redis. -
Verifica que los datos persisten en el directorio del host
/opt/redis_data. -
Vuelve a crear el contenedor
rediscon la misma configuración. -
Accede nuevamente a la aplicación Guestbook y comprueba que los mensajes anteriores siguen presentes.
🔹 Parte 2: Configuración personalizada¶
Tarea 2.1: Cambio del nombre del contenedor de base de datos¶
La aplicación Guestbook utiliza una variable de entorno llamada REDIS_SERVER para saber a qué servidor de base de datos debe conectarse. Por defecto, esta variable tiene el valor redis.
-
Elimina los contenedores anteriores (mantén la red y el volumen).
-
Crea un nuevo contenedor de base de datos con el nombre
bd_guestbook(en lugar deredis). -
Despliega el contenedor de la aplicación Guestbook configurando la variable de entorno
REDIS_SERVERpara que apunte al nuevo nombre del contenedor de base de datos. -
Verifica que la aplicación funciona correctamente con esta nueva configuración.
🔹 Parte 3: Análisis y documentación¶
Tarea 3.1: Análisis de la arquitectura¶
Responde a las siguientes preguntas en tu documentación:
-
Redes Docker:
- ¿Por qué es necesario crear una red personalizada en lugar de usar la red por defecto de Docker?
- ¿Cómo se comunican los contenedores dentro de la red
red_guestbook? - ¿Qué ventaja proporciona la resolución DNS automática de Docker?
-
Volúmenes:
- ¿Por qué es importante usar volúmenes para la base de datos?
- ¿Qué pasaría si no usáramos un volumen para Redis?
- ¿Qué diferencias existen entre un volumen y un bind mount?
-
Variables de entorno:
- ¿Qué función cumple la variable de entorno
REDIS_SERVER? - ¿Cómo se pasa una variable de entorno a un contenedor en Docker?
- ¿Qué función cumple la variable de entorno
-
Puertos:
- ¿Por qué no es necesario exponer el puerto de Redis al host?
- ¿En qué casos sería necesario exponer el puerto de la base de datos?
Tarea 3.2: Comandos utilizados¶
Documenta todos los comandos Docker que has utilizado para:
- Crear la red
- Crear y gestionar el contenedor Redis
- Crear y gestionar el contenedor Guestbook
- Verificar el estado de contenedores y redes
- Inspeccionar la configuración de red de los contenedores
🔹 Parte 4 (opcional): Despliegue con Docker Compose¶
Si ya has visto Docker Compose en clase o quieres investigar por tu cuenta:
-
Crea un archivo
docker-compose.ymlque defina toda la infraestructura de la aplicación Guestbook. -
El archivo debe incluir:
- Definición de la red
- Configuración del servicio Redis con volumen
- Configuración del servicio Guestbook con mapeo de puertos
- Variables de entorno necesarias
-
Despliega la aplicación completa con un solo comando.
Entregables¶
-
Documentación en formato Markdown o PDF que incluya:
- Comandos utilizados en cada tarea con una breve explicación
- Capturas de pantalla que demuestren:
- La aplicación Guestbook funcionando en el navegador
- El contenido del directorio de persistencia
- La lista de contenedores en ejecución
- La inspección de la red Docker
- Respuestas a las preguntas de análisis de la Parte 3
- Prueba de la persistencia de datos (Tarea 1.4)
-
(Opcional) Archivo
docker-compose.ymlfuncional si realizas la Parte 4.
Evaluación¶
Se evaluará:
- La correcta implementación de redes y volúmenes Docker.
- El funcionamiento completo de la aplicación.
- La demostración de persistencia de datos.
- La claridad y precisión de la documentación.
- Las respuestas al análisis técnico.
Condiciones de entrega¶
Las publicadas en la plataforma Moodle del curso.
Recursos de apoyo¶
- Documentación oficial de Docker: https://docs.docker.com
- Imagen Redis en Docker Hub: https://hub.docker.com/_/redis
- Networking en Docker: https://docs.docker.com/network/
- Volúmenes en Docker: https://docs.docker.com/storage/volumes/
- Variables de entorno: https://docs.docker.com/engine/reference/commandline/run/#env