MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Initialiser les données sur mongo dockerisé

Une approche plus autonome :

  • créer des fichiers javascript qui initialisent votre base de données
  • créer une image docker MongoDB dérivée contenant ces fichiers

Il existe de nombreuses réponses qui utilisent des contenants jetables ou créent des volumes et les relient, mais cela semble trop compliqué. Si vous regardez le docker-entrypoint.sh de l'image mongo docker, vous voyez que la ligne 206 exécute /docker-entrypoint-initdb.d/*.js fichiers à l'initialisation en utilisant une syntaxe :mongo <db> <js-file> . Si vous créez une image docker MongoDB dérivée qui contient vos données de départ, vous pouvez :

  • avoir une seule commande d'exécution docker qui lève un mongo avec des données de départ
  • les données sont conservées pendant les arrêts et les démarrages du conteneur
  • réinitialisez ces données avec les commandes docker stop, rm et run
  • déploiement facile avec des planificateurs d'exécution tels que k8s, mesos, swarm, rancher

Cette approche est particulièrement bien adaptée pour :

  • Les POC qui ont juste besoin de données réalistes pour l'affichage
  • Pipelines CI/CD nécessitant des données cohérentes pour les tests de boîte noire
  • exemples de déploiements pour les démonstrations de produits (ingénieurs commerciaux, propriétaires de produits)

Comment :

  1. Créez et testez vos scripts d'initialisation (nettoyage des données le cas échéant)
  2. Créez un Dockerfile pour votre image dérivée qui copie vos scripts d'initialisation

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

    docker build -t mongo-sample-data:3.4 .
    
  4. Éventuellement, poussez votre image vers un registre docker pour que d'autres puissent l'utiliser

  5. Exécutez votre image docker

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

Par défaut, docker-entrypoint.sh appliquera vos scripts au test db ; la commande d'exécution ci-dessus env var MONGO_INITDB_DATABASE=application appliquera ces scripts à l'application db à la place. Alternativement, vous pouvez créer et basculer vers différentes bases de données dans le fichier js.

J'ai un référentiel github qui fait exactement cela - voici les fichiers pertinents.