MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Initialisieren Sie Daten auf dem dockerisierten Mongo

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:

  1. Erstellen und testen Sie Ihre Initialisierungsskripts (Pflegedaten nach Bedarf)
  2. 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/
    
  3. Erstellen Sie Ihr Docker-Image

    docker build -t mongo-sample-data:3.4 .
    
  4. Pushen Sie Ihr Image optional in eine Docker-Registrierung, damit andere es verwenden können

  5. 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.