MySQL (og varianter som Percona Server) giver mulighed for at se en database ved første containerstart beskrevet i afsnittet "Initialisering af en ny instans" i docker hub-side .
En Dockerfil, der bruger denne teknik, vil se sådan ud
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
Bemærk:den efterfølgende skråstreg er vigtig.
Når du docker run
dette billede vil docker oprette containeren, entdocker. -entrypoint.sh
vil udføre sql-scriptet, og så vil containeren være klar til at betjene data.
Data vil forblive ved genstart af beholderen - frødataene og efterfølgende ændringer.
Du kan genbruge containeren for hurtigere opstartstider - efterfølgende containerstarter behøver ikke at initialisere databasen eller seede dataene. Når du har brug for uberørte data, skal du slette containeren og docker run
billedet igen.
Når du sletter containeren, skal du huske at slette docker-volumenet, der indeholder db-dataene:docker rm -v $CONTAINER_NAME
.
Jeg bruger denne metode til at levere standarddata til sprog/ramme POC'er samt CI/CD. Initialisering af en ny database og seeding af store mængder data kan tage et par minutter, så du vil have noget logik til at sætte automatiske operationer på pause, indtil du kan oprette en db-forbindelse.
Håber dette hjælper dig på vej.