MySQL (und Varianten wie Percona Server) bieten eine Möglichkeit zum Seeding einer Datenbank beim ersten Containerstart, die im Abschnitt „Initialisieren einer neuen Instanz“ in Docker-Hub-Seite .
Ein Dockerfile, das diese Technik verwendet, sieht folgendermaßen aus
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
Hinweis:Der abschließende Schrägstrich des Verzeichnisses ist wichtig.
Wenn Sie docker run
dieses Bild erstellt Docker den Container, den docker -entrypoint.sh
führt das SQL-Skript aus, und dann ist der Container bereit, Daten bereitzustellen.
Die Daten bleiben auch nach Neustarts des Containers bestehen – die Seed-Daten und nachfolgende Änderungen.
Sie können den Container für schnellere Startzeiten wiederverwenden – bei nachfolgenden Containerstarts muss die Datenbank nicht initialisiert oder die Daten gesät werden. Wenn Sie unverfälschte Daten benötigen, löschen Sie den Container und docker run
das Bild erneut.
Denken Sie beim Löschen des Containers daran, das Docker-Volume mit den Datenbankdaten zu löschen:docker rm -v $CONTAINER_NAME
.
Ich verwende diese Methode, um Standarddaten bereitzustellen für Sprach-/Framework-POCs sowie CI/CD. Das Initialisieren einer neuen Datenbank und das Seeding großer Datenmengen kann einige Minuten dauern, daher sollten Sie einige Logik benötigen, um automatisierte Vorgänge anzuhalten, bis Sie erfolgreich eine DB-Verbindung herstellen können.
Hoffe, das hilft dir auf deinem Weg.