Docker MySQL
MySQL es uno de los sistemas de gestión de bases de datos más populares y ampliamente utilizados en el mundo. Sin embargo, a veces puede ser complicado configurar un entorno de desarrollo para trabajar con MySQL. Afortunadamente, Docker hace que sea mucho más fácil crear y gestionar entornos de desarrollo.
Usar Docker para crear un entorno de desarrollo con MySQL tiene varias ventajas:
- Aislamiento: Cada contenedor de Docker es independiente, lo que significa que puedes tener múltiples versiones de MySQL en tu máquina sin conflictos.
- Portabilidad: Puedes compartir tu entorno de desarrollo con otros desarrolladores simplemente compartiendo el archivo
docker-compose.yml
o elDockerfile
que usaste para crear el contenedor. - Facilidad de uso: Docker simplifica la instalación y configuración de MySQL, evitarás tener que lidiar con dependencias y configuraciones complicadas en una máquina local.
- Reproducibilidad: Puedes crear un entorno de desarrollo idéntico en cualquier máquina que tenga Docker instalado, lo que facilita la colaboración entre desarrolladores.
- Despliegue: Puedes usar el mismo contenedor de Docker para desplegar tu aplicación en producción, lo que facilita la transición de desarrollo a producción.
Estructura del entorno
Este entorno tiene una estructura bastante simple:
- Dockerfile: Este archivo contiene las instrucciones para construir la imagen de Docker que se usará para crear el contenedor de MySQL.
- mysqld.cnf: Este archivo contiene la configuración de MySQL que se usará al iniciar el contenedor.
- paneldb_dump.sql: Este archivo contiene el volcado de la base de datos que se usará para inicializar la base de datos en el contenedor de MySQL. Puedes usar un volcado de tu propia base de datos o crear uno nuevo desde cero.
Dockerfile
FROM mysql:latest
# Variables de entorno (ajústalas a tu gusto)
ENV MYSQL_ROOT_PASSWORD=pass1234
ENV MYSQL_DATABASE=mydb
ENV MYSQL_USER=diego
ENV MYSQL_PASSWORD=secret1234
# Copia el script de inicialización al directorio de entrada de MySQL
COPY init.sql /docker-entrypoint-initdb.d/
# Copia el archivo de configuración personalizado
COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
# Exponer el puerto 3306
EXPOSE 3306
Nota: Asegúrate de ajustar las variables de entorno a tus necesidades.
MYSQL_ROOT_PASSWORD
es la contraseña del usuario root
MYSQL_DATABASE
es el nombre de la base de datos que se creará al iniciar el contenedor
MYSQL_USER
yMYSQL_PASSWORD
son el nombre de usuario y la contraseña del usuario que se creará.Por defecto busca el archivo en
mysql.conf.d
, puedes cambiarlo a tu gusto para aplicar la configuración que necesites.Tambien busca el archivo
init.sql
en el directorio de trabajo, este archivo creará la base de datos y las tablas necesarias al iniciar el contenedor. Puedes usar un volcado de tu propia base de datos o crear uno nuevo desde cero.
mysqld.cnf
Nota: Este archivo de configuración es muy básico y solo establece la dirección de enlace para que MySQL escuche en todas las interfaces de red. Puedes agregar más configuraciones según tus necesidades.
init.sql
Archivo de inicialización de la base de datos. Puedes usar un volcado de tu propia base de datos o crear uno nuevo desde cero.
CREATE DATABASE IF NOT EXISTS CTF;
USE CTF;
CREATE TABLE CTF.Usuarios (
id_cliente INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100),
telefono VARCHAR(20),
correo VARCHAR(100)
);
INSERT INTO CTF.Usuarios (nombre, telefono, correo)
VALUES
('Ana Martínez', '644123456', 'ana.martinez@email.com'),
('Carlos Gómez', '622987654', 'carlos.gomez@email.com'),
('Lucía Rodríguez', '699112233', 'lucia.rodriguez@email.com'),
('Miguel Torres', '655334455', 'miguel.torres@email.com'),
('Laura Fernández', '677889900', 'laura.fernandez@email.com'),
('Pablo Ramírez', '611223344', 'pablo.ramirez@email.com'),
('Sofía Herrera', '633445566', 'sofia.herrera@email.com'),
('Javier Morales', '644556677', 'javier.morales@email.com'),
('Isabel Cruz', '655667788', 'isabel.cruz@email.com'),
('David Navarro', '666778899', 'david.navarro@email.com'),
('María López', '611889900', 'maria.lopez@email.com'),
('Alejandro Pérez', '622334455', 'alejandro.perez@email.com'),
('Carmen Sánchez', '633112233', 'carmen.sanchez@email.com'),
('Daniel Ortega', '644223344', 'daniel.ortega@email.com'),
('Patricia Ramos', '655334466', 'patricia.ramos@email.com'),
('Andrés Gutiérrez', '666445577', 'andres.gutierrez@email.com'),
('Elena Castro', '611556677', 'elena.castro@email.com'),
('Luis Mendoza', '622667788', 'luis.mendoza@email.com'),
('Natalia Vega', '633778899', 'natalia.vega@email.com'),
('Fernando Ruiz', '644889900', 'fernando.ruiz@email.com'),
('Sara Domínguez', '655990011', 'sara.dominguez@email.com'),
('Roberto Álvarez', '666112233', 'roberto.alvarez@email.com'),
('Claudia Serrano', '611223355', 'claudia.serrano@email.com'),
('Iván Pacheco', '622334466', 'ivan.pacheco@email.com'),
('Beatriz León', '633445577', 'beatriz.leon@email.com'),
('Manuel Iglesias', '644556688', 'manuel.iglesias@email.com'),
('Victoria Silva', '655667799', 'victoria.silva@email.com'),
('Francisco Rojas', '666778800', 'francisco.rojas@email.com'),
('Julia Muñoz', '611889911', 'julia.munoz@email.com'),
('Alberto Flores', '622990022', 'alberto.flores@email.com');
-- SHOW DATABASES;
-- USE Almacen;
-- SHOW TABLES;
Construcción de la imagen y ejecución del contenedor
Esto iniciará el contenedor en segundo plano (-d
significa "detached") y mapeará el puerto 3306 del contenedor al puerto 3306 de tu máquina local. Puedes cambiar el nombre del contenedor y el puerto según tus necesidades.
Puedes lanzar docker exec -it <container_id> mysql -u root -p
para acceder a la consola de MySQL dentro del contenedor. Te pedirá la contraseña que configuraste en el Dockerfile
(en este caso, pass1234
).
Compose
Podemos simplificarlo con un compose
version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql-test
environment:
MYSQL_ROOT_PASSWORD: pass1234
MYSQL_DATABASE: mydb
MYSQL_USER: diego
MYSQL_PASSWORD: secret1234
ports:
- "3306:3306"
volumes:
- ./mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
Para ejecutar el contenedor con Docker Compose, simplemente ejecuta: