sql >> Database >  >> NoSQL >> MongoDB

Gegevens initialiseren op gedockte mongo

Een meer op zichzelf staande benadering:

  • maak javascript-bestanden die uw database initialiseren
  • maak een afgeleide MongoDB docker-afbeelding die deze bestanden bevat

Er zijn veel antwoorden die wegwerpcontainers gebruiken of volumes creëren en koppelen, maar dit lijkt te ingewikkeld. Als je de docker-entrypoint.sh van de mongo docker-afbeelding bekijkt, zie je dat regel 206 /docker-entrypoint-initdb.d/*.js uitvoert bestanden bij initialisatie met behulp van een syntaxis:mongo <db> <js-file> . Als u een afgeleide MongoDB-docker-image maakt die uw seed-gegevens bevat, kunt u:

  • een enkele docker-opdracht uitvoeren die een mongo op de been houdt met seed-gegevens
  • gegevens worden bewaard door het stoppen en starten van containers
  • reset die gegevens met docker stop-, rm- en run-commando's
  • gemakkelijk implementeren met runtime-planners zoals k8s, mesos, swarm, rancher

Deze aanpak is vooral geschikt voor:

  • POC's die alleen wat realistische gegevens nodig hebben voor weergave
  • CI/CD-pijplijnen die consistente gegevens nodig hebben voor black box-testen
  • voorbeeldimplementaties voor productdemo's (verkoopingenieurs, producteigenaren)

Hoe:

  1. Maak en test uw initialisatiescripts (groominggegevens indien van toepassing)
  2. Maak een Dockerfile voor uw afgeleide afbeelding die uw init-scripts kopieert

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Bouw uw docker-imago

    docker build -t mongo-sample-data:3.4 .
    
  4. U kunt uw afbeelding eventueel naar een docker-register pushen zodat anderen ze kunnen gebruiken

  5. Voer uw docker-afbeelding uit

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

Docker-entrypoint.sh past standaard uw scripts toe op de test db; de bovenstaande opdracht env var MONGO_INITDB_DATABASE=application zal deze scripts toepassen op de application db in plaats daarvan. Als alternatief kunt u verschillende dbs in het js-bestand maken en er naar overschakelen.

Ik heb een github-repo die precies dit doet - hier zijn de relevante bestanden.



  1. redis-cli omgeleid naar 127.0.0.1

  2. MongoDB $isNumber

  3. MongoDB:Hoe een query uit te voeren voor records waarbij het veld null of niet is ingesteld?

  4. MongoDB $sqrt