sql >> Database teknologi >  >> NoSQL >> MongoDB

Initialiser data på dockeriseret mongo

En mere selvstændig tilgang:

  • opret javascript-filer, der initialiserer din database
  • opret et afledt MongoDB docker-billede, der indeholder disse filer

Der er mange svar, der bruger engangsbeholdere eller skaber volumener og forbinder dem, men det virker alt for kompliceret. Hvis du tager et kig på mongo docker-billedets docker-entrypoint.sh, ser du, at linje 206 udfører /docker-entrypoint-initdb.d/*.js filer ved initialisering ved hjælp af en syntaks:mongo <db> <js-file> . Hvis du opretter et afledt MongoDB docker-billede, der indeholder dine frødata, kan du:

  • have en enkelt docker-run-kommando, der står op for en mongo med frødata
  • have data bevares gennem containerstop og -starter
  • nulstil disse data med docker stop-, rm- og run-kommandoer
  • nem implementering med runtime-planlæggere som k8s, mesos, swarm, rancher

Denne tilgang er især velegnet til:

  • POC'er, der bare har brug for nogle realistiske data til visning
  • CI/CD-pipelines, der har brug for konsistente data til black box-testning
  • eksempler på implementeringer af produktdemoer (salgsingeniører, produktejere)

Sådan gør du:

  1. Opret og test dine initialiseringsscripts (plejedata efter behov)
  2. Opret en Dockerfile til dit afledte billede, der kopierer dine init-scripts

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Byg dit docker-image

    docker build -t mongo-sample-data:3.4 .
    
  4. Skub eventuelt dit billede til et docker-register, som andre kan bruge

  5. Kør dit docker-billede

    docker run                               \
        --name mongo-sample-data             \
        -p 27017:27017                       \
        --restart=always                     \
        -e MONGO_INITDB_DATABASE=application \
        -d mongo-sample-data:3.4
    

Som standard vil docker-entrypoint.sh anvende dine scripts til test db; ovenstående kørselskommando env var MONGO_INITDB_DATABASE=application vil anvende disse scripts til application db i stedet for. Alternativt kan du oprette og skifte til forskellige dbs i js-filen.

Jeg har en github-repo, der gør netop dette - her er de relevante filer.



  1. MongoError:Kan ikke udtrække geonøgler fra objekt med Type :Point

  2. Gør spring-data-mongodb multi-lejer

  3. Sådan gør du:Administrer HBase-data via Hue

  4. Hvorfor tager en Redis dump.rdb-fil på 500 MB omkring 5,0 GB hukommelse?