Ein eigenständigerer Ansatz:
- JavaScript-Dateien erstellen, die Ihre Datenbank initialisieren
- Erstellen Sie ein abgeleitetes MongoDB-Docker-Image, das diese Dateien enthält
Es gibt viele Antworten, die Einwegbehälter verwenden oder Volumes erstellen und diese verknüpfen, aber das scheint zu kompliziert zu sein. Wenn Sie sich das docker-entrypoint.sh des Mongo-Docker-Images ansehen, sehen Sie, dass Zeile 206 /docker-entrypoint-initdb.d/*.js
ausführt Dateien bei der Initialisierung mit einer Syntax:mongo <db> <js-file>
. Wenn Sie ein abgeleitetes MongoDB-Docker-Image erstellen, das Ihre Seed-Daten enthält, können Sie:
- einen einzelnen Docker-Run-Befehl haben, der einen Mongo mit Seed-Daten erstellt
- Daten werden durch Containerstopps und -starts beibehalten
- setzen Sie diese Daten mit den Docker-Befehlen stop, rm und run zurück
- einfache Bereitstellung mit Laufzeitplanern wie k8s, mesos, swarm, rancher
Dieser Ansatz eignet sich besonders gut für:
- POCs, die nur einige realistische Daten zur Anzeige benötigen
- CI/CD-Pipelines, die konsistente Daten für Blackbox-Tests benötigen
- Beispielbereitstellungen für Produktdemos (Vertriebsingenieure, Produktbesitzer)
Gewusst wie:
- Erstellen und testen Sie Ihre Initialisierungsskripts (Pflegedaten nach Bedarf)
-
Erstellen Sie ein Dockerfile für Ihr abgeleitetes Image, das Ihre Init-Skripte kopiert
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
-
Erstellen Sie Ihr Docker-Image
docker build -t mongo-sample-data:3.4 .
-
Pushen Sie Ihr Image optional in eine Docker-Registrierung, damit andere es verwenden können
-
Führen Sie Ihr Docker-Image aus
docker run \ --name mongo-sample-data \ -p 27017:27017 \ --restart=always \ -e MONGO_INITDB_DATABASE=application \ -d mongo-sample-data:3.4
Standardmäßig wendet docker-entrypoint.sh Ihre Skripte auf den test
an DB; den obigen Ausführungsbefehl env var MONGO_INITDB_DATABASE=application
wendet diese Skripte auf die application
an db stattdessen. Alternativ könnten Sie in der js-Datei verschiedene DBs erstellen und zu ihnen wechseln.
Ich habe ein Github-Repo, das genau das tut - hier sind die relevanten Dateien.