MySQL (y variantes como Percona Server) brindan una función para inicializar una base de datos en el primer inicio del contenedor que se describe en la sección "Inicializar una nueva instancia" en página central acoplable .
Un Dockerfile que usa esta técnica se verá como
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
Nota:la barra diagonal final del directorio es importante.
Cuando docker run
esta imagen, la ventana acoplable creará el contenedor, la ventana acoplable -punto de entrada.sh
ejecutará el script sql, y luego el contenedor estará listo para servir datos.
Los datos persistirán durante los reinicios del contenedor:los datos iniciales y las modificaciones posteriores.
Puede reutilizar el contenedor para tiempos de inicio más rápidos; los inicios posteriores del contenedor no necesitarán inicializar la base de datos o generar los datos. Cuando necesite datos prístinos, elimine el contenedor y docker run
la imagen de nuevo.
Cuando elimine el contenedor, recuerde eliminar el volumen de la ventana acoplable que contiene los datos de la base de datos:docker rm -v $CONTAINER_NAME
.
Uso este método para proporcionar datos estándar para POC de lenguaje/marco, así como CI/CD. La inicialización de una nueva base de datos y la inicialización de grandes cantidades de datos pueden demorar un par de minutos, por lo que necesitará alguna lógica para pausar las operaciones automatizadas hasta que pueda establecer una conexión de base de datos con éxito.
Espero que esto te ayude en tu camino.