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:
$ 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 nombremy-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 enmy-secret-pw
. Reemplacemy-secret-pw
con una contraseña segura de su elección.-e MYSQL_DATABASE=mydb
opcionalmente crea una base de datos llamadamydb
. Puede cambiarmydb
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:
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
.
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.
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.
Mysql -u root -p
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 llamadomy-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.
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.
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.
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.
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.
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.
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.
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:
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