Skip to content

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-pod y 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.