Desplegar WordPress con Docker Compose y MariaDB

·4 min de lectura·

Docker Compose permite describir WordPress y su base de datos como servicios relacionados. Con volúmenes nombrados, los datos sobreviven a la recreación de los contenedores; con secretos montados como archivos, evitamos escribir contraseñas directamente en el fichero Compose [1][2].

Este ejemplo utiliza las imágenes oficiales de WordPress y MariaDB. Antes de desplegarlo, elige etiquetas de imagen mantenidas y adecuadas a tu entorno en lugar de depender de una etiqueta flotante.

Preparar contraseñas

Crea dos ficheros locales con contraseñas largas y únicas:

secrets/db_password.txt
secrets/db_root_password.txt

Restringe sus permisos y excluye el directorio secrets/ del control de versiones:

chmod 700 secrets
chmod 600 secrets/*.txt

Los secretos basados en archivos de Compose se montan en /run/secrets/ en los servicios que los declaran [1]. En una instalación local de Compose, los ficheros originales siguen estando en el disco del host; protege su acceso y no los publiques.

Definir compose.yaml

Crea un archivo compose.yaml con esta estructura. Sustituye wordpress:<ETIQUETA_VALIDADA> y mariadb:<ETIQUETA_VALIDADA> por etiquetas reales fijadas y verificadas antes de iniciar los servicios:

services:
  db:
    image: mariadb:<ETIQUETA_VALIDADA>
    restart: unless-stopped
    environment:
      MARIADB_DATABASE: wordpress
      MARIADB_USER: wordpress
      MARIADB_PASSWORD_FILE: /run/secrets/db_password
      MARIADB_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
    secrets:
      - db_password
      - db_root_password
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  wordpress:
    image: wordpress:<ETIQUETA_VALIDADA>
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password
    volumes:
      - wordpress_data:/var/www/html

volumes:
  db_data:
  wordpress_data:

secrets:
  db_password:
    file: ./secrets/db_password.txt
  db_root_password:
    file: ./secrets/db_root_password.txt

La imagen de WordPress admite WORDPRESS_DB_PASSWORD_FILE; la imagen de MariaDB ofrece las variables MARIADB_PASSWORD_FILE y MARIADB_ROOT_PASSWORD_FILE [2][3]. Solo se concede la contraseña raíz al servicio de base de datos. La base de datos no publica su puerto en el host.

Los volúmenes nombrados db_data y wordpress_data conservan la base de datos y los archivos de WordPress fuera del ciclo de vida de los contenedores [4]. No borres esos volúmenes si quieres mantener la instalación y sus datos.

Iniciar y comprobar los servicios

Desde el directorio que contiene compose.yaml, inicia la aplicación:

docker compose up -d
docker compose ps

Compose espera a que el servicio de base de datos supere su comprobación de estado antes de iniciar WordPress [5]. Cuando ambos servicios estén activos, abre http://localhost:8080 desde el propio equipo o http://IP_DEL_SERVIDOR:8080 desde una red con acceso al puerto. Completa allí el asistente de instalación de WordPress.

El puerto del ejemplo sirve HTTP sin TLS. Para publicar el sitio en Internet, colócalo detrás de un proxy inverso configurado con HTTPS y restringe los puertos de administración según las necesidades del despliegue.

Para revisar los registros durante el primer arranque:

docker compose logs --follow db wordpress

Detén los servicios sin borrar los datos con:

docker compose down

No añadas --volumes (-v) a ese comando si necesitas conservar los volúmenes nombrados.

Consideraciones sobre inicialización y mantenimiento

  • Las variables iniciales de la imagen de MariaDB crean usuarios y bases de datos cuando el directorio de datos está vacío. Cambiarlas después no modifica automáticamente las cuentas de una base de datos ya inicializada [3].
  • Mantén copias de seguridad de la base de datos y de los archivos de WordPress. Un volumen persistente ayuda ante la recreación de contenedores, pero no sustituye una copia de seguridad.
  • Planifica las actualizaciones de las imágenes y conserva una forma de recuperar la versión y los datos anteriores si la actualización falla.
  • El ejemplo no publica phpMyAdmin ni crea accesos amplios a la base de datos; añade herramientas administrativas solo si son necesarias y restringe su acceso.

En resumen

Compose facilita ejecutar WordPress y MariaDB como servicios conectados. Los volúmenes nombrados preservan sus datos, y los secretos limitan qué servicios reciben cada contraseña. Antes de exponer el sitio, fija imágenes adecuadas, configura HTTPS y prepara copias de seguridad.

📚 Fuentes consultadas

  1. Secrets in Docker Compose — Docker Docs
  2. WordPress Official Image — Docker Hub
  3. MariaDB Server Docker Official Image Environment Variables — MariaDB Documentation
  4. Docker Compose Quickstart: persist data with named volumes — Docker Docs
  5. Control startup and shutdown order in Compose — Docker Docs, Using Healthcheck — MariaDB Documentation

Imagen

Servicios WordPress y MariaDB coordinados con Docker Compose

¿Te ha resultado útil?

Compártelo con tu red de contactos profesionales.

Comentarios (0)

Sé el primero en comentar.