MariaDB es la base de datos que hace funcionar aplicaciones tan conocidas como WordPress o Nextcloud, y con Docker la tienes lista en menos de un minuto. En esta guía levantas MariaDB con un solo archivo docker-compose.yml, guardas los datos en un volumen persistente, defines la contraseña de root y el usuario inicial con variables de entorno, conectas una aplicación y programas copias de seguridad con mariadb-dump. La misma explicación está disponible en inglés.

Puntos clave

  • MariaDB es un sistema de gestión de bases de datos relacional de código abierto, bifurcación de MySQL creada en 2009 y compatible con él en la mayoría de los casos.
  • El montaje recomendado es un único contenedor con la imagen oficial mariadb, cuyos datos viven en un volumen montado en /var/lib/mysql.
  • El servidor escucha en el puerto 3306 y su configuración inicial se controla con variables de entorno como MARIADB_ROOT_PASSWORD, MARIADB_DATABASE, MARIADB_USER y MARIADB_PASSWORD.
  • Fija una versión LTS concreta como mariadb:11.8 en vez de :latest; las versiones LTS reciben tres años de correcciones (11.4 de 2024, 11.8 de 2025 y 12.3, la más reciente de 2026).
  • Las copias de seguridad se hacen con la herramienta mariadb-dump (el antiguo mysqldump), que exporta la base de datos a un archivo SQL que luego puedes restaurar.

¿En qué se diferencia MariaDB de MySQL en Docker?

MariaDB es una bifurcación de MySQL que nació en 2009, cuando Michael "Monty" Widenius, uno de los creadores originales de MySQL, lo separó tras la compra de la empresa por parte de Oracle. Lo bautizó con el nombre de su hija Maria y hoy lo mantiene la MariaDB Foundation, una fundación sin ánimo de lucro que garantiza que el proyecto siga siendo libre. Durante años fue un sustituto directo de MySQL: mismos comandos, mismos conectores y compatibilidad en el propio protocolo.

En Docker las diferencias prácticas son pocas pero importantes. La imagen oficial se llama mariadb en lugar de mysql, y sus variables de entorno usan el prefijo MARIADB_ (aunque por compatibilidad todavía acepta las antiguas con prefijo MYSQL_). MariaDB suele publicar antes las funciones nuevas y ofrece motores de almacenamiento propios como Aria, además del habitual InnoDB. Como dice la propia documentación oficial, MariaDB es "uno de los servidores de bases de datos más populares del mundo", y en el ecosistema de contenedores es la opción por defecto de proyectos como Nextcloud o WordPress. Si prefieres una base de datos con un enfoque distinto, revisa también cómo instalar PostgreSQL con Docker.

¿Cómo es el docker-compose.yml de MariaDB con volumen persistente?

Necesitas una máquina con Docker y el plugin Compose instalados; si aún no los tienes, empieza por instalar Docker en Ubuntu 24.04. Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml. Cambia las contraseñas de ejemplo por valores propios y seguros antes de arrancar:

services:
  db:
    image: mariadb:11.8
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: cambia_esta_clave_root
      MARIADB_DATABASE: miapp
      MARIADB_USER: miapp
      MARIADB_PASSWORD: cambia_esta_clave_usuario
      MARIADB_MYSQL_LOCALHOST_USER: 1
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  db_data:

Fíjate en varios detalles del archivo. El volumen con nombre db_data se monta en /var/lib/mysql, que es donde MariaDB guarda todas las tablas; mientras ese volumen exista, tus datos sobreviven aunque borres y recrees el contenedor. La opción restart: unless-stopped hace que la base de datos vuelva a arrancar sola tras un reinicio del servidor. El healthcheck usa el script healthcheck.sh que trae la imagen: solo marca el contenedor como healthy cuando MariaDB acepta conexiones y ha terminado de inicializar InnoDB, lo que resulta clave para que las aplicaciones esperen a que la base de datos esté lista.

Con el archivo listo, arranca la pila en segundo plano y comprueba el estado:

docker compose up -d
docker compose ps
docker compose logs -f db

La primera vez, MariaDB crea la estructura interna, aplica las variables de entorno y prepara la base de datos miapp y el usuario miapp. Cuando docker compose ps muestre el contenedor como healthy, el servidor estará listo para aceptar conexiones en el puerto 3306.

¿Qué variables de entorno necesita y cómo se crea el usuario inicial?

La imagen exige que definas la contraseña de root de una de estas cuatro formas: MARIADB_ROOT_PASSWORD (la habitual), MARIADB_ROOT_PASSWORD_HASH, MARIADB_RANDOM_ROOT_PASSWORD (genera una aleatoria y la muestra en el log) o MARIADB_ALLOW_EMPTY_ROOT_PASSWORD (desaconsejada salvo para pruebas). Si no indicas ninguna, el contenedor se niega a arrancar como medida de seguridad.

A partir de ahí, tres variables opcionales preparan el entorno en el primer arranque: MARIADB_DATABASE crea una base de datos vacía, y MARIADB_USER junto con MARIADB_PASSWORD crean un usuario no privilegiado con permisos totales solo sobre esa base de datos. Es el patrón recomendado: cada aplicación entra con su propio usuario, no con root. Para no escribir contraseñas en texto plano dentro del docker-compose.yml, añade el sufijo _FILE a cualquiera de estas variables y apunta a un fichero; así puedes leer los secretos desde /run/secrets. Ten en cuenta un matiz importante: estas variables solo tienen efecto la primera vez, cuando el volumen está vacío. Si cambias la contraseña en el archivo después, no se actualizará sola; tendrás que modificarla desde dentro de la base de datos.

¿Cómo conectar una aplicación (Nextcloud, WordPress) a MariaDB?

La forma correcta de conectar otro contenedor a MariaDB es a través de la red interna de Docker Compose, sin publicar el puerto 3306 en el anfitrión. Compose crea una red por defecto donde cada servicio es accesible por su nombre, así que la aplicación se conecta al host db (el nombre del servicio) en el puerto 3306. Este es un fragmento típico para un WordPress que reutiliza la base de datos anterior:

  wordpress:
    image: wordpress:6.8-php8.3-apache
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: miapp
      WORDPRESS_DB_USER: miapp
      WORDPRESS_DB_PASSWORD: cambia_esta_clave_usuario
    ports:
      - "8080:80"

Con depends_on y la condición service_healthy, WordPress no arranca hasta que MariaDB pasa su healthcheck, lo que evita el clásico error de "conexión rechazada" en el primer despliegue. Nextcloud se configura igual, cambiando los nombres de variable por MYSQL_HOST, MYSQL_DATABASE, MYSQL_USER y MYSQL_PASSWORD. La regla general: no expongas el puerto 3306 a Internet; deja la base de datos solo en la red interna y saca a la web únicamente la aplicación, si hace falta detrás de un proxy como Traefik.

¿Cómo hacer copias de seguridad con mariadb-dump?

La herramienta estándar para respaldar MariaDB es mariadb-dump, el antiguo mysqldump renombrado (el nombre mysqldump sigue funcionando como enlace por compatibilidad). Exporta una o varias bases de datos a un archivo SQL que contiene las instrucciones necesarias para reconstruirlas. Ejecútalo desde el contenedor y redirige la salida a un archivo en el anfitrión:

docker compose exec db mariadb-dump -u root -p'cambia_esta_clave_root' miapp > miapp-backup.sql

Para respaldar todas las bases de datos de una vez, cambia el nombre miapp por la opción --all-databases. Conviene automatizar este comando con una tarea programada (cron) y guardar las copias fuera del servidor. Restaurar es el proceso inverso: se canaliza el archivo SQL de vuelta hacia el cliente mariadb.

docker compose exec -T db mariadb -u root -p'cambia_esta_clave_root' miapp < miapp-backup.sql

El indicador -T desactiva la asignación de un pseudoterminal, imprescindible cuando rediriges un archivo hacia el contenedor. Para bases de datos grandes o con mucha actividad, valora mariadb-backup, la herramienta de copia física en caliente que no bloquea las tablas InnoDB.

Preguntas frecuentes

¿Puedo migrar de MySQL a MariaDB sin problemas?

En la mayoría de los casos sí, porque MariaDB nació como sustituto directo de MySQL y comparte protocolo, comandos y formato de volcado. Puedes exportar tu base de datos MySQL con mysqldump e importarla en un contenedor MariaDB sin cambios. Aun así, en las versiones más recientes ambos proyectos han divergido en algunas funciones y tipos de datos, así que para una migración de producción conviene probar antes en un contenedor de pruebas y revisar la documentación oficial.

¿Por qué no debo usar la etiqueta latest?

Porque :latest puede arrastrarte sin avisar a un salto de versión mayor durante un simple docker compose pull, y un cambio de versión en una base de datos puede requerir migraciones. Al fijar una etiqueta LTS concreta como mariadb:11.8 controlas tú cuándo actualizas y sobre qué versión probada corren tus datos. Las versiones LTS reciben tres años de correcciones de seguridad, tiempo de sobra para planificar la actualización.

¿Cómo restauro una copia de seguridad en un contenedor nuevo?

Levanta un contenedor MariaDB con las mismas variables de entorno, espera a que esté healthy y canaliza el archivo SQL hacia el cliente mariadb con docker compose exec -T db mariadb -u root -p'clave' miapp < miapp-backup.sql. Como el volcado incluye las instrucciones para crear las tablas y los datos, la base de datos queda idéntica a la original. Verifica después el número de filas de alguna tabla clave para confirmar que la restauración fue completa.

Conclusión

Con un único docker-compose.yml tienes una base de datos MariaDB robusta, con los datos aislados en un volumen que tú controlas y una configuración inicial reproducible mediante variables de entorno. El siguiente paso lógico es conectarle una aplicación real (WordPress, Nextcloud o la que necesites), cerrar el puerto 3306 a Internet y programar copias de seguridad periódicas con mariadb-dump. A partir de ahí, MariaDB se convierte en la capa de datos fiable sobre la que apoyar el resto de tu infraestructura autoalojada.

Fuentes

  1. Imagen oficial de MariaDB en Docker Hub
  2. MariaDB Knowledge Base: variables de entorno del contenedor
  3. MariaDB.org: MariaDB Server 12.3 LTS liberado
  4. Repositorio de la imagen oficial en GitHub (MariaDB/mariadb-docker)

Ruta: Bases de datos y almacenamiento self-hosted con Docker