Cómo ejecutar una base de datos MySQL en un contenedor Docker

Utilizar una base de datos contenedorizada local ofrece flexibilidad y simplifica la configuración. Permite replicar de cerca los entornos de producción sin la complejidad de las instalaciones de bases de datos tradicionales. Docker agiliza este proceso, haciendo que sea fácil desplegar, gestionar y escalar bases de datos en contenedores aislados con solo unos pocos comandos.

En esta guía, aprenderás a:

  • Ejecutar una base de datos contenedorizada local
  • Acceder a la shell de una base de datos contenedorizada
  • Conectar a una base de datos contenedorizada desde tu host
  • Persistir los datos de la base de datos en un volumen
  • Limpieza del laboratorio

Prerequisitos

Para seguir esta guía, debes tener Docker instalado. Para las instrucciones de instalación, por favor consulta el sitio web de Docker.

Guía Paso a Paso para Configurar Bases de Datos Contenedorizadas

1. Ejecutar una Base de Datos Contenedorizada Local

Los sistemas de bases de datos más populares, como MySQL,PostgreSQL,MongoDB, tienen imágenes oficiales de Docker disponibles en Docker Hub. Estas imágenes cuidadosamente seleccionadas siguen las mejores prácticas, asegurando que tienes acceso a las últimas características y actualizaciones de seguridad.

Para comenzar, visita Docker Hub y busca la base de datos que te interese. Cada página de imagen proporciona instrucciones detalladas sobre cómo ejecutar el contenedor, personalizar tu configuración y configurar la base de datos para satisfacer tus necesidades. Para obtener más información sobre la imagen de MySQL proporcionada en esta guía, consulta la página de la imagen de MySQL en Docker Hub.

Para ejecutar un contenedor de base de datos, puedes usar ya sea la interfaz gráfica de usuario de Docker Desktop o la CLI. Para ejecutar un contenedor usando la CLI, ejecuta el siguiente comando en un terminal:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

En este comando:

  • --name my-mysql asigna el nombre my-mysql a tu contenedor para una referencia más fácil.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw establece la contraseña de root para MySQL en my-secret-pw. Reemplace my-secret-pw con una contraseña segura de su elección.
  • -e MYSQL_DATABASE=mydb opcionalmente crea una base de datos llamada mydb. Puede cambiar mydb por el nombre de base de datos que desee.
  • -d ejecuta el contenedor en modo desvinculado, lo que significa que se ejecuta en segundo plano.
  • mysql:latest especifica que desea usar la versión más reciente de la imagen de MySQL.

Para verificar que su contenedor está en ejecución, ejecute docker ps en una terminal:

Shell

 

run docker ps

También puede verificar lo mismo en la consola de Docker Desktop:

2. Acceder a la Shell de una Base de Datos Contenedorizada

Cuando una base de datos se ejecuta dentro de un contenedor Docker, es posible que necesite acceder a su shell para gestionar la base de datos, ejecutar comandos o realizar tareas administrativas. Docker proporciona una forma directa de hacerlo utilizando el comando docker exec. Además, puede usar la interfaz gráfica de Docker Desktop si prefiere una interfaz gráfica.

Si aún no tiene un contenedor de base de datos en ejecución, consulte Ejecutar una Base de Datos Local Contenedorizada . Para acceder al terminal de un contenedor MySQL utilizando la CLI, puede usar el siguiente comando docker exec.

Shell

docker exec -it my-mysql bash 

En este comando:

  • docker exec informa a Docker que desea ejecutar un comando en un contenedor en ejecución.
  • -it asegura que la terminal a la que está accediendo sea interactiva para que pueda escribir comandos en ella.
  • my-mysql es el nombre de tu contenedor MySQL. Si le diste un nombre diferente al ejecutarlo, usa ese nombre en su lugar.
  • El comando que deseas ejecutar dentro del contenedor es bash. Abre una shell Bash que te permite interactuar con el sistema de archivos del contenedor y las aplicaciones instaladas.
  • Después de ejecutar este comando, tendrás acceso a la shell Bash dentro de tu contenedor MySQL, desde la cual puedes gestionar tu servidor MySQL directamente. Puedes ejecutar Exit para regresar a tu terminal.

Verifica si el contenedor Docker está en ejecución.

Shell

 

run docker ps

Una vez que hayas accedido al terminal del contenedor, puedes ejecutar cualquier herramienta disponible en ese contenedor. El siguiente (Image) ejemplo muestra usar MySQL en el contenedor para listar las bases de datos.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

La tabla que creamos y los datos que guardamos en la tabla de prueba solo son persistentes hasta que usamos el mismo contenedor; todos los datos se perderán una vez que recreemos o construyamos un nuevo contenedor.

Puedes validar esto saliendo del contenedor y volviendo a ingresar a la base de datos del contenedor para ver si existen datos. Verás que los datos aún existen en la base de datos siempre y cuando el contenedor esté en ejecución.

3. Conectar a una Base de Datos Contenedorizada Desde Tu Host

Conectar a una base de datos contenedorizada desde su máquina anfitriona implica mapear un puerto dentro del contenedor a un puerto en su máquina anfitriona. Este proceso asegura que la base de datos dentro del contenedor es accesible a través de la red de la máquina anfitriona. Para MySQL, el puerto predeterminado es 3306. Al exponer este puerto, puede usar varias herramientas de administración de bases de datos o aplicaciones en su máquina anfitriona para interactuar con su base de datos MySQL.

Antes de comenzar, debe eliminar cualquier contenedor que haya ejecutado previamente para esta guía. Para detener y eliminar un contenedor, ya sea:

  • En una terminal, ejecute docker remove --force my-mysql para eliminar el contenedor llamado my-mysql;
  • O, en el panel de Docker, seleccione el ícono Eliminar junto a su contenedor en la vista Contenedores.

Luego, puede usar la GUI de Docker Desktop o la CLI para ejecutar el contenedor con el puerto mapeado.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

En esta orden, -p 3307:3306 mapea el puerto 3307 en el anfitrión al puerto 3306 en el contenedor.

4. Persistir los datos de la base de datos en un volumen

Persistir los datos de la base de datos en un volumen de Docker es necesario para garantizar que sus datos sobrevivan a los reinicios y eliminaciones del contenedor. Un volumen de Docker le permite almacenar archivos de base de datos fuera de la capa escribible del contenedor, haciendo posible actualizar el contenedor, cambiar bases y compartir datos sin perderlos. Puede adjuntar un volumen a su contenedor de base de datos utilizando ya sea la CLI de Docker o la GUI de Docker Desktop.

Nota: Como se hizo anteriormente en la sección Conectar a una Base de Datos Contenedorizada, antes de comenzar, debe eliminar cualquier contenedor que haya ejecutado previamente para esta guía.

Luego, puede usar la GUI de Docker Desktop o la CLI para ejecutar el contenedor con un volumen.

Para ejecutar su contenedor de base de datos con un volumen adjunto, incluya la opción —v con su comando docker run. Esto especifica un nombre de volumen y la ruta donde la base de datos almacena sus datos dentro del contenedor. Si el volumen no existe, Docker lo crea automáticamente por usted.

Para ejecutar un contenedor de base de datos con un volumen adjunto, verifique que los datos persisten. Ejecute el contenedor y adjunte el volumen.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Este comando monta el volumen llamado my-db-volume en el directorio /var/lib/mysql dentro del contenedor.

Cree algunos datos en la base de datos. Use el comando docker exec para ejecutar MySQL dentro del contenedor y crear una tabla.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Este comando utiliza la herramienta MySQL en el contenedor para crear una tabla llamada mytable con una columna llamada column_name, y finalmente, inserta un valor.

Detenga y elimine el contenedor. Sin un volumen, la tabla que creó se perderá cuando elimine el contenedor.

Shell

docker remove --force my-mysql

Inicie un nuevo contenedor con el volumen adjunto. Esta vez, no necesita especificar ninguna variable de entorno, ya que la configuración se guarda en el volumen.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Verifique que la tabla que creó依然 exists. Luego, use el comando docker exec nuevamente para ejecutar MySQL dentro del contenedor.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Este comando utiliza la herramienta MySQL en el contenedor para seleccionar todos los registros de la tabla table. Deberías ver una salida como la siguiente.

SQL

 

column_name

value

5. Limpieza de la Imagen del Contenedor MySQL

Para eliminar un contenedor, utilice el comando docker remove con los nombres o IDs de los contenedores separados por espacios. Por ejemplo:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Conclusión

En última instancia, ejecutar MySQL con Docker proporciona una solución portátil, escalable y eficiente para la gestión de bases de datos. Los contenedores aislados de Docker ayudan a agilizar la implementación, reducen problemas de compatibilidad y optimizan el uso de recursos. Al permitir un control fácil de versiones y reinicios de entorno, Docker respalda el desarrollo y las pruebas rápidas. Es ideal para gestionar bases de datos MySQL en microservicios, facilitando su implementación y escalabilidad mientras se mantiene un rendimiento fuerte.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container