Práctica 2.7: WordPress con Docker Compose
Relación 2.7¶
Descripción¶
Actividad: Despliegue de WordPress con MariaDB usando Docker Compose
En esta práctica retomarás el despliegue de WordPress con MariaDB de la Práctica 2.3, pero utilizando Docker Compose para simplificar la gestión de esta aplicación compleja con múltiples contenedores, volúmenes y variables de entorno.
Objetivo general¶
Aprender a:
- Desplegar aplicaciones complejas con base de datos usando Docker Compose.
- Gestionar múltiples volúmenes de forma declarativa.
- Comparar volúmenes Docker vs. bind mounts en Docker Compose.
- Configurar aplicaciones con múltiples variables de entorno.
- Entender la gestión de datos persistentes con Compose.
- Realizar backups y migraciones de datos.
Contexto de trabajo¶
Recordatorio de WordPress:
- WordPress: CMS en PHP con Apache (puerto 80/tcp) - imagen
wordpress - MariaDB: Base de datos relacional (puerto 3306/tcp) - imagen
mariadb - Persistencia: Dos volúmenes necesarios (WordPress y base de datos)
- Variables: Múltiples variables de entorno para la configuración
Complejidad:
Esta es la aplicación más compleja que has desplegado hasta ahora, con:
- Doble persistencia de datos
- Múltiples variables de entorno críticas
- Dependencia estricta entre servicios
🔹 Parte 1: Despliegue con volúmenes Docker¶
Tarea 1.1: Creación del archivo docker-compose.yml¶
-
Crea un directorio:
~/wordpress_compose. -
Investiga en la documentación de Docker Hub las imágenes de WordPress y MariaDB para identificar:
- Variables de entorno necesarias para WordPress
- Variables de entorno necesarias para MariaDB
- Puertos que utilizan
- Directorios para persistencia de datos
-
Crea un archivo
docker-compose.ymlque defina:Servicio de WordPress: - Imagen:
wordpress- Puerto 80 del host mapeado al puerto del contenedor - Variables de entorno necesarias para conexión a base de datos - Volumen Docker para el contenido de WordPress (/var/www/html/wp-content) - Dependencia del servicio de base de datos - Política de reinicio automáticoServicio de MariaDB: - Imagen:
mariadb- Variables de entorno para configuración inicial (base de datos, usuario, contraseñas) - Volumen Docker para los datos de la base de datos (/var/lib/mysql) - Política de reinicio automáticoVolúmenes: Define dos volúmenes Docker (uno para WordPress, otro para MariaDB)
-
Analiza y responde:
- ¿Por qué hay dos volúmenes diferentes?
- ¿Qué datos almacena cada volumen?
- ¿Por qué WordPress usa el nombre del servicio de base de datos como hostname?
Tarea 1.2: Despliegue y configuración¶
-
Despliega el escenario con Docker Compose.
-
Observa qué recursos se crean automáticamente.
-
Verifica el estado de los servicios.
-
Accede a WordPress (http://localhost) y completa la instalación:
- Título del sitio
- Usuario administrador
- Contraseña
-
Crea contenido:
- Al menos 3 páginas
- Al menos 5 posts/entradas
- Instala y activa un tema
- Instala al menos 2 plugins
Tarea 1.3: Gestión del escenario¶
-
Detener servicios:
- Detén ambos servicios
- Verifica que están detenidos pero no eliminados
-
Reiniciar y verificar persistencia:
- Arranca los servicios nuevamente
- Accede a WordPress
- Verifica que todo el contenido persiste
-
Eliminar contenedores (sin volúmenes):
- Elimina el escenario manteniendo los volúmenes
- Verifica que los volúmenes siguen existiendo
- Recrea el escenario
- Comprueba que los datos persisten
-
Eliminar todo (con volúmenes):
- Elimina el escenario incluyendo volúmenes
- Verifica que los volúmenes se han eliminado
- Recrea el escenario
- Comprueba que WordPress pide instalación inicial
🔹 Parte 2: Despliegue con bind mounts¶
Tarea 2.1: Archivo docker-compose.yml con bind mount¶
-
Crea un nuevo directorio:
~/wordpress_bind. -
Crea los directorios necesarios para los bind mounts:
- Directorio para datos de WordPress
- Directorio para datos de MySQL/MariaDB
-
Crea un nuevo archivo
docker-compose.ymlque use bind mounts en lugar de volúmenes Docker:- Investiga la sintaxis para bind mounts en Docker Compose
- Usa rutas relativas (
./directorio) para montar desde el host - Mantén la misma estructura de servicios que en la Parte 1
- Cambia solo la definición de volúmenes por bind mounts
-
Despliega la aplicación y configura WordPress nuevamente.
Tarea 2.2: Comparación de enfoques¶
-
Explora los directorios
wordpressymysqlen el host. -
Identifica qué archivos hay en cada directorio.
-
Compara con los volúmenes Docker:
Aspecto Volúmenes Docker Bind Mounts Ubicación Visibilidad desde host Portabilidad Backups Permisos
🔹 Parte 3: Configuración avanzada¶
Tarea 3.1: Variables de entorno desde archivo¶
-
Investiga cómo usar archivos
.envcon Docker Compose. -
Crea un archivo
.envque contenga todas las variables de configuración:- Contraseña root de MySQL
- Nombre de la base de datos
- Usuario de la base de datos
- Contraseña del usuario
- Variables correspondientes para WordPress
- Puerto de WordPress
-
Modifica tu
docker-compose.ymlpara usar variables del archivo.envcon la sintaxis${VARIABLE}. -
Despliega y verifica que funciona correctamente.
-
Reflexiona sobre las ventajas de seguridad de este enfoque.
Tarea 3.2: Configuración de red personalizada¶
-
Investiga en la documentación cómo definir redes personalizadas en Docker Compose.
-
Modifica tu archivo
docker-compose.ymlpara incluir:- Definición de una red personalizada tipo bridge
- Conecta ambos servicios a esta red
- Usa un nombre descriptivo para la red
-
Verifica la configuración de red usando comandos de Docker Compose e inspección de red.
Tarea 3.3: Healthchecks y límites de recursos¶
-
Investiga la sintaxis de healthchecks y límites de recursos en Docker Compose.
-
Añade a tu archivo
docker-compose.yml:Para WordPress: - Healthcheck que verifique la disponibilidad del puerto 80 - Límites: 1 CPU y 512MB de memoria
- cpus: 1 para WordPress
- memoria: 512M para ambos
- test: curl -f http://localhost para WordPress
- interval: 30s
- timeout: 10s
- retries: 3
Para MariaDB: - Healthcheck que verifique la disponibilidad de MySQL - Límites: 0.5 CPU y 512MB de memoria
- cpus: 0.5 para MariaDB
- memoria: 512M para ambos
- test: mysqladmin ping -h localhost para MariaDB
- interval: 30s
- timeout: 3s
- retries: 3
-
Investiga qué comando usar para verificar el estado de salud de los servicios.
-
Verifica que los healthchecks funcionan correctamente.
🔹 Parte 4: Backup y restauración¶
Tarea 4.1: Backup con volúmenes Docker¶
-
Investiga estrategias para realizar backups de volúmenes Docker.
-
Crea un directorio para backups.
-
Investiga y ejecuta comandos para:
- Crear un backup del volumen de WordPress usando un contenedor temporal
- Crear un backup del volumen de MariaDB usando un contenedor temporal
- Comprimir los datos en archivos tar.gz
- Almacenar los backups en el directorio del host
-
Verifica que los archivos de backup se han creado correctamente.
Pista: Necesitarás usar contenedores temporales que monten el volumen y un directorio de backup.
Tarea 4.2: Restauración desde backup¶
-
Elimina el escenario completo incluyendo los volúmenes.
-
Vuelve a crear el escenario (se crearán volúmenes vacíos).
-
Investiga y ejecuta comandos para restaurar los datos desde los backups:
- Usa contenedores temporales para descomprimir y restaurar datos
- Restaura el volumen de WordPress
- Restaura el volumen de MariaDB
-
Arranca el escenario con Docker Compose.
-
Verifica que todos los datos se han restaurado correctamente (contenido, configuración, base de datos).
Reflexión: ¿Por qué es importante probar regularmente los procesos de restauración?
Tarea 4.3: Backup con bind mounts¶
-
Para el escenario con bind mounts, el backup es más directo.
-
Investiga qué comandos del sistema operativo puedes usar para:
- Crear copias de seguridad de directorios completos
- Comprimir los directorios en archivos tar.gz
- Verificar la integridad de los backups
-
Realiza backups de ambos directorios (wordpress y mysql).
-
Compara las ventajas y desventajas del backup con bind mounts vs. volúmenes Docker:
- Facilidad de ejecución
- Necesidad de comandos Docker
- Visibilidad de los datos
- Portabilidad
🔹 Parte 5: Análisis y documentación¶
Tarea 5.1: Preguntas de análisis¶
Responde en tu documentación:
-
Volúmenes vs. bind mounts:
- ¿Cuándo preferirías volúmenes Docker?
- ¿Cuándo preferirías bind mounts?
- ¿Cuál es más fácil para backups?
-
Seguridad:
- ¿Es seguro tener las contraseñas en el archivo Compose?
- ¿Cómo mejorarías la seguridad usando
.env? - ¿Qué otras medidas de seguridad aplicarías?
-
Persistencia:
- ¿Qué pasaría si pierdes el volumen de WordPress?
- ¿Y si pierdes el volumen de MariaDB?
- ¿Cuál es más crítico?
-
Dependencias:
- ¿Por qué WordPress depende de la base de datos?
- ¿Qué pasa si intentas iniciar WordPress sin MariaDB?
- ¿
depends_ongarantiza que MariaDB esté lista?
-
Comparación con práctica anterior:
- ¿Cuántos comandos necesitabas en la Práctica 2.3?
- ¿Cuántos comandos necesitas con Docker Compose?
- ¿Qué es más fácil de mantener?
Tarea 5.2: Escenarios de uso¶
Describe cómo usarías cada enfoque en estos escenarios:
- Desarrollo local: ¿Volúmenes o bind mounts?
- Producción: ¿Volúmenes o bind mounts?
- Testing/CI: ¿Volúmenes o bind mounts?
Entregables¶
-
Documentación en formato Markdown con:
- Ambos archivos
docker-compose.yml(volúmenes y bind mounts) - Archivo
.envcon variables de entorno - Todos los comandos utilizados
- Capturas de pantalla:
- WordPress funcionando
- Contenido creado (páginas, posts, tema, plugins)
- Servicios en ejecución
- Estructura de volúmenes/directorios
- Proceso de backup y restauración
- Healthchecks
- Respuestas a todas las preguntas
- Comparación volúmenes vs. bind mounts
- Comparación con gestión manual (Práctica 2.3)
- Ambos archivos
-
Archivos de configuración:
docker-compose.ymlcon volúmenesdocker-compose.ymlcon bind mountsdocker-compose.ymlcompleto (con redes, healthchecks, etc.).env
Evaluación¶
Se evaluará:
- Correcta configuración con volúmenes y bind mounts.
- Comprensión de persistencia de datos.
- Realización exitosa de backups y restauración.
- Análisis crítico de diferentes enfoques.
- Comparación con gestión manual.
Condiciones de entrega¶
Las publicadas en la plataforma Moodle del curso.
Recursos de apoyo¶
- Documentación oficial de Docker Compose: https://docs.docker.com/compose/
- Volúmenes en Compose: https://docs.docker.com/compose/compose-file/07-volumes/
- WordPress en Docker: https://hub.docker.com/_/wordpress
- MariaDB en Docker: https://hub.docker.com/_/mariadb
- Backups de volúmenes: https://docs.docker.com/storage/volumes/#back-up-restore-or-migrate-data-volumes