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

Inizializza i dati su mongo dockerizzato

Un approccio più autonomo:

  • crea file javascript che inizializzano il tuo database
  • crea un'immagine Docker MongoDB derivata che contenga questi file

Ci sono molte risposte che utilizzano contenitori usa e getta o creano volumi e li collegano, ma questo sembra eccessivamente complicato. Se dai un'occhiata a docker-entrypoint.sh dell'immagine della finestra mobile mongo, vedrai che la riga 206 esegue /docker-entrypoint-initdb.d/*.js file all'inizializzazione utilizzando una sintassi:mongo <db> <js-file> . Se crei un'immagine Docker MongoDB derivata che contiene i tuoi dati seed, puoi:

  • disponi di un singolo comando di esecuzione della finestra mobile che regga un mongo con i dati seed
  • avere i dati viene mantenuto tramite arresti e riavvii del contenitore
  • reimposta quei dati con i comandi docker stop, rm ed esegui
  • facilmente implementabile con pianificatori di runtime come k8s, mesos, swarm, rancher

Questo approccio è particolarmente adatto a:

  • POC che necessitano solo di alcuni dati realistici per la visualizzazione
  • Condutture CI/CD che necessitano di dati coerenti per il test della scatola nera
  • Esempio di implementazioni per demo di prodotti (tecnici di vendita, proprietari di prodotti)

Come:

  1. Crea e testa i tuoi script di inizializzazione (grooming dei dati a seconda dei casi)
  2. Crea un Dockerfile per la tua immagine derivata che copia i tuoi script di inizializzazione

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Crea la tua immagine Docker

    docker build -t mongo-sample-data:3.4 .
    
  4. Facoltativamente, invia la tua immagine a un registro Docker affinché altri possano utilizzarla

  5. Esegui la tua immagine Docker

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

Per impostazione predefinita, docker-entrypoint.sh applicherà i tuoi script al test db; il comando di esecuzione sopra env var MONGO_INITDB_DATABASE=application applicherà questi script all'application db invece. In alternativa, puoi creare e passare a db diversi nel file js.

Ho un repository github che fa proprio questo:ecco i file rilevanti.