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
- Secrets in Docker Compose — Docker Docs
- WordPress Official Image — Docker Hub
- MariaDB Server Docker Official Image Environment Variables — MariaDB Documentation
- Docker Compose Quickstart: persist data with named volumes — Docker Docs
- Control startup and shutdown order in Compose — Docker Docs, Using Healthcheck — MariaDB Documentation