sql >> Databasteknik >  >> NoSQL >> MongoDB

Initiera data på dockeriserade mongo

Ett mer självständigt tillvägagångssätt:

  • skapa javascript-filer som initierar din databas
  • skapa en härledd MongoDB docker-bild som innehåller dessa filer

Det finns många svar som använder engångsbehållare eller skapar volymer och länkar dem, men detta verkar alltför komplicerat. Om du tittar på mongo docker-bildens docker-entrypoint.sh ser du att rad 206 kör /docker-entrypoint-initdb.d/*.js filer vid initiering med en syntax:mongo <db> <js-file> . Om du skapar en härledd MongoDB docker-bild som innehåller dina frödata kan du:

  • ha ett enda docker-körningskommando som står upp för en mongo med frödata
  • ha data bevaras genom containerstopp och start
  • återställ dessa data med kommandon docker stop, rm och run
  • implementera enkelt med körtidsschemaläggare som k8s, mesos, swarm, rancher

Detta tillvägagångssätt är särskilt väl lämpat för:

  • POC:er som bara behöver lite realistisk data för visning
  • CI/CD-pipelines som behöver konsekventa data för black box-testning
  • exempelimplementeringar för produktdemonstrationer (säljingenjörer, produktägare)

Så här gör du:

  1. Skapa och testa dina initialiseringsskript (grooming data vid behov)
  2. Skapa en Dockerfil för din härledda bild som kopierar dina init-skript

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Bygg din docker-bild

    docker build -t mongo-sample-data:3.4 .
    
  4. Eventuellt kan du skicka din bild till ett dockningsregister som andra kan använda

  5. Kör din docker-bild

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

Som standard kommer docker-entrypoint.sh att tillämpa dina skript på test db; ovanstående körkommando env var MONGO_INITDB_DATABASE=application kommer att tillämpa dessa skript på application db istället. Alternativt kan du skapa och byta till olika dbs i js-filen.

Jag har en github-repo som gör just detta - här är de relevanta filerna.



  1. Säkra Node Redis

  2. Övervakning och operationshantering av MongoDB 4.0 med ClusterControl

  3. Kan redis-nyckelutrymmesaviseringar skjutas till redis-strömmen istället för pub-/underkanal

  4. Finns det något sätt att "snyggt" skriva ut MongoDB-skalutdata till en fil?