MySQL (en varianten zoals Percona Server) bieden een mogelijkheid voor het seeden van een database bij het starten van de eerste container, zoals beschreven in de sectie "Een nieuwe instantie initialiseren" in de docker-hubpagina .
Een Dockerfile die deze techniek gebruikt, ziet eruit als
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
Let op:de directory trailing slash is belangrijk.
Wanneer u docker run
deze afbeelding, zal docker de container maken, de -entrypoint.sh
voert het sql-script uit en dan is de container klaar om gegevens te leveren.
Gegevens blijven behouden tijdens het opnieuw opstarten van de container - de seed-gegevens en daaropvolgende wijzigingen.
U kunt de container opnieuw gebruiken voor snellere opstarttijden - daaropvolgende containerstarts hoeven de database niet te initialiseren of de gegevens te seeden. Als u zuivere gegevens nodig heeft, verwijdert u de container en docker run
de afbeelding opnieuw.
Wanneer u de container verwijdert, vergeet dan niet om het docker-volume met de db-gegevens te verwijderen:docker rm -v $CONTAINER_NAME
.
Ik gebruik deze methode om standaardgegevens te verstrekken voor taal / framework POC's en CI/CD. Het initialiseren van een nieuwe database en het zaaien van grote hoeveelheden gegevens kan een paar minuten duren, dus u zult enige logica nodig hebben om geautomatiseerde bewerkingen te pauzeren totdat u met succes een db-verbinding kunt maken.
Ik hoop dat dit je op weg helpt.