Configuración del Servidor de Base de Datos MySQL (MariaDB) en Contenedor Docker
Una vez que tenemos nuestra aplicación Laravel y el servidor web NGINX funcionando correctamente en sus respectivos contenedores, necesitamos configurar el servidor de base de datos MySQL —en este caso, MariaDB— dentro de su contenedor correspondiente.
1. Acceder al contenedor de MySQL
Primero, accedemos al contenedor de MySQL. Este contenedor se llama mysql
y ya ha sido definido dentro del archivo docker-compose.yml
.
docker exec -it mysql sh
Este comando nos permite abrir una shell interactiva dentro del contenedor de MySQL, donde realizaremos la instalación y configuración inicial de MariaDB.
2. Instalar MariaDB y herramientas necesarias
Actualizamos los repositorios e instalamos MariaDB, el cliente de base de datos, y nano
para editar archivos, que es posible que ya lo tengamos instalado, pero lo instalamos en caso de que no esté para asegurarnos que tenemos el editor de texto para poder trabajar:
apk update
apk add mariadb mariadb-client nano
Explicación:
apk update
: actualiza los índices de los paquetes disponibles.apk add mariadb mariadb-client
: instala MariaDB (una alternativa compatible con MySQL) y el cliente para poder realizar conexiones.nano
: editor de texto simple para modificar archivos de configuración.
3. Preparar directorios y permisos para MariaDB
Antes de poder iniciar el servicio MariaDB, es esencial asegurarnos de que existen los directorios que el motor de base de datos necesita para ejecutarse correctamente, y que además tienen los permisos apropiados para el usuario mysql
.
mkdir -p /run/mysqld
chown -R mysql:mysql /run/mysqld /var/lib/mysql
Explicación detallada:
-
mkdir -p /run/mysqld
: Este directorio es utilizado por MariaDB para almacenar su archivo de socket, que es el canal de comunicación entre el cliente y el servidor de base de datos. La opción-p
asegura que no se generen errores si el directorio ya existe. -
chown -R mysql:mysql
: Cambia recursivamente la propiedad del directorio/run/mysqld
y del directorio de datos/var/lib/mysql
al usuario y grupomysql
. Esto es crucial porque si MariaDB no tiene permisos de escritura y lectura en estas ubicaciones, el servicio fallará al iniciar.
4. Inicializar la base de datos
El siguiente paso es preparar la estructura de datos base que MariaDB necesita para funcionar correctamente. Esto incluye tablas internas del sistema como usuarios, privilegios, y configuraciones de seguridad.
mysql_install_db --user=mysql --datadir=/var/lib/mysql
¿Qué hace este comando?
mysql_install_db
: es un script que crea los archivos iniciales del sistema de base de datos.--user=mysql
: asegura que todos los archivos sean propiedad del usuariomysql
, que será quien ejecute el servidor.--datadir=/var/lib/mysql
: especifica el directorio donde se almacenarán los archivos de datos de la base de datos.
Este paso solo se realiza una vez. Si ya existen archivos en ese directorio, el comando no tendrá efecto.
5. Iniciar MariaDB manualmente
Una vez inicializada, ya podemos lanzar el servidor MariaDB de manera manual:
mysqld --user=mysql &
Explicación:
mysqld
: es el proceso que ejecuta el servidor de base de datos.--user=mysql
: indica que el proceso se debe ejecutar bajo el usuariomysql
.&
: ejecuta el comando en segundo plano, dejándonos libre la terminal para continuar con otras operaciones.
Esto iniciará MariaDB y lo dejará corriendo para que podamos conectarnos desde el cliente o desde Laravel.
7. Conectarse al servidor de bases de datos
Ahora que el servidor está activo, podemos conectarnos utilizando el cliente de base de datos:
mariadb
Este comando abre un prompt donde podemos ejecutar directamente sentencias SQL y gestionar la base de datos de forma interactiva.
8. Crear base de datos para Laravel
Desde el cliente de mariadb
, creamos la base de datos que Laravel usará para guardar sus datos:
CREATE DATABASE laravel_db;
USE laravel_db;
SHOW TABLES;
Explicación:
CREATE DATABASE laravel_db;
: crea una nueva base de datos vacía llamadalaravel_db
.USE laravel_db;
: selecciona esta base de datos como contexto activo para operaciones siguientes.SHOW TABLES;
: muestra todas las tablas en la base de datos seleccionada. Si aún no hemos ejecutado migraciones desde Laravel, esta lista estará vacía.
Con estos pasos, el entorno MariaDB está listo y esperando recibir conexiones desde Laravel. Ahora puedes continuar con la configuración de las variables de entorno en .env
, ejecutar migraciones y trabajar con tu base de datos desde la aplicación.