MySQL (och varianter som Percona Server) tillhandahåller en möjlighet att se en databas vid första containerstart som beskrivs i avsnittet "Initiera en ny instans" i docker hub-sida .
En Dockerfil som använder denna teknik kommer att se ut
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
Obs:katalogens bakre snedstreck är viktigt.
När du docker run
denna bild kommer docker att skapa behållaren, entdocker. -entrypoint.sh
kommer att köra sql-skriptet och sedan är behållaren redo att servera data.
Data kommer att finnas kvar genom omstarter av behållare - frödata och efterföljande ändringar.
Du kan återanvända behållaren för snabbare starttider - efterföljande behållarestarter behöver inte initiera databasen eller seed data. När du behöver orörda data, ta bort behållaren och docker run
bilden igen.
När du tar bort behållaren, kom ihåg att ta bort docker-volymen som innehåller db-data:docker rm -v $CONTAINER_NAME
.
Jag använder den här metoden för att tillhandahålla standarddata för språk/ramverk POC samt CI/CD. Att initiera en ny databas och sådd stora mängder data kan ta ett par minuter så du vill ha lite logik för att pausa automatiska operationer tills du lyckas skapa en db-anslutning.
Hoppas detta hjälper dig på vägen.