Laboratorio: Uso de Pods en Podman con WordPress, MariaDB y HAProxy
🎯 Objetivo General
Comprender el concepto de pod en Podman como unidad lógica que agrupa contenedores que comparten red y otros recursos, mediante la implementación práctica de un servicio web completo que utiliza WordPress, MariaDB y HAProxy dentro de un mismo pod.
📚 Introducción
En este laboratorio aprenderás a utilizar pods en Podman, un concepto inspirado en Kubernetes, donde varios contenedores se agrupan para compartir el mismo espacio de red, facilitando su comunicación y administración.
Esto permite simular arquitecturas reales en entornos de desarrollo local, antes de escalar a plataformas como Kubernetes. Usaremos como caso práctico el despliegue de WordPress, que depende de una base de datos (MariaDB) y puede beneficiarse de un proxy de entrada como HAProxy para exponer el servicio y realizar balanceo de carga si fuese necesario.
🔧 Requisitos Previos
- Sistema operativo Linux (idealmente Rocky Linux o Fedora)
- Podman instalado (
sudo dnf install -y podman) - Editor de texto (nano, vim, etc.)
🔨 Paso a Paso
🗂️ 1. Crear un direcotio de trabajo
mkdir ~/podman-wp-pod ; cd ~/podman-wp-pod
🚛 2. Crear un pod
podman pod create --name wp-pod -p 30080:8080
podman pod ps
Este comando crea un pod llamado
wp-pody expone el puerto 8080 del pod en el puerto 30080 del host. Todos los contenedores dentro de este pod compartirán la misma red.
📦 3. Iniciar la base de datos MariaDB
podman run -d --pod wp-pod --name wp-db \
-e MYSQL_ROOT_PASSWORD=rootpassword \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wp_user \
-e MYSQL_PASSWORD=wp_password \
docker.io/library/mariadb:10.6
🚀 4. Iniciar WordPress apuntando a la base de datos
podman run -d --pod wp-pod --name wp-app \
-e WORDPRESS_DB_HOST=wp-db \
-e WORDPRESS_DB_USER=wp_user \
-e WORDPRESS_DB_PASSWORD=wp_password \
-e WORDPRESS_DB_NAME=wordpress \
docker.io/library/wordpress:latest
🌐 5. Agregar HAProxy como proxy de entrada
cat <<EOF > haproxy.cfg
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:8080
default_backend servers
backend servers
server wp localhost:80 maxconn 32
EOF
podman run -d --pod wp-pod --name wp-proxy \
-v $(pwd)/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro,Z \
docker.io/library/haproxy:2.4
🌍 Validación
También puedes inspeccionar el estado del pod y sus contenedores:
podman pod ps
podman ps --pod
Puedes probar acceder al sitio web de Wordpress desde el navegador o con curl, asegurar se de reemplazar por el FQDN correcto:
curl http://student-0-aio.35-227-133-255.nip.io:30080
Deberías ver la pantalla de instalación de WordPress.
🧹 Limpieza del entorno
Esto elimina todos los contenedores y el pod, limpiando el entorno para futuros laboratorios.
podman pod rm -f wp-pod
podman rmi docker.io/library/mariadb:10.6 \
docker.io/library/wordpress:latest \
docker.io/library/haproxy:2.4
cd ~/ ; rm -fR ~/podman-wp-pod
✅ Conclusión
Este laboratorio ha demostrado cómo usar pods en Podman para simular una arquitectura de servicios compuesta por múltiples contenedores que necesitan interactuar estrechamente. Al compartir la red del pod, estos contenedores pueden comunicarse fácilmente usando localhost y acceder a puertos estándar sin configuración adicional. Esto es especialmente útil para entornos de desarrollo que buscan aproximarse al modelo de Kubernetes.