Docker MySQL - Cómo crear dos bases de datos dentro del mismo contenedor

Docker MySQL - Cómo crear dos bases de datos dentro del mismo contenedor

🤔 ¿Por qué?

Ya estaba cansado.

Sólo quería no contaminar mi base de datos dentro de Docker con un montón de nombres falsos o contenido de Lorem Ipsum. Porque cuando quiero listar todos los registros o fotos en mi aplicación actual, quiero los originales, para la presentación al cliente.

Además, quería una base de datos adicional, donde si mis migraciones fallan, pueda volver atrás fácilmente. O destruir la base de datos y crearla de nuevo, sin ejecutar seeders o usar una copia de seguridad con datos casi reales.

Muchos frameworks tienen un enfoque diferente para esto. Ejecutar pruebas dentro de transacciones, post-limpieza, etc.

Pero no quería aprender una manera de hacerlo desde el framwork.

Se me ocurrió una forma más simple.

¿Qué pasa si creo una segunda base de datos en el contenedor? Mejor aún, ¡de forma automática!

🔨 ¿Cómo?

Para demostrar que no uso IA para generar contenido formal en mis publicaciones, utilizaré potato (patata, papa) como nombre de proyecto en este tutorial.

En primer lugar, crea una carpeta donde quieras almacenar los scripts. Para este tutorial, la llamaremos dockerdb_init. Luego, crea un archivo llamado create_test_database.sql con el siguiente contenido:

CREATE DATABASE IF NOT EXISTS `potato_db_test`;
GRANT ALL ON `potato_db_test`.* TO 'potato_db_user'@'%'

Docker solo crea una base de datos con las variables de entorno escritas. Dado que el proyecto utilizará una base de datos de prueba, este script agregará un sufijo test.

Si estás usando un archivo docker-compose.yml, esta es la especificación para el contenedor.

db:
container_name: potato_db
image: "mysql:8.0"
volumes:
- "./dockerdb:/var/lib/mysql"
- "./dockerdb_init:/docker-entrypoint-initdb.d"
env_file:
- .env
ports:
- "3306:3306"

Ya que prefiero mantener mis variables de entorno en un archivo separado, puedes colocar el siguiente contenido en tu archivo .env:

Terminal window
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=potato_db
MYSQL_USER=potato_db_user
MYSQL_PASSWORD=potato_db_pass

La primera vez que se ejecute el contenedor, se ejecutará el script y ahora tendrás dos bases de datos: potato_db y potato_db_test.

Mis posts no son generados por la IA, sin embargo, podrían estar corregidos por ella. El primer borrador siempre es de mi creación

Tags

Autor

Escrito por Helmer Davila

En otros lenguajes

I only wanted to not pollute my Docker database with a bunch of fake names or lorem ipsum content

Docker MySQL - How to create two databases within the same container

Je n’ai pas voulu contaminer ma base de données dans Docker avec plusieurs faux noms ou du contenu de Lorem Ipsum

Docker MySQL: Comment creér deux bases de données dans un conteneur

Posts relacionados

macOS VM y Docker corriendo en Parallels

Cómo correr una VM macOS y Docker juntos sobre macOS usando Parallels

Rails 6 + MySQL + PHPMyAdmin

Rails 6: corriendo sobre Docker con PHPMyAdmin