sql >> Base de Datos >  >> NoSQL >> MongoDB

Inicializar datos en mongo dockerizado

Un enfoque más autónomo:

  • cree archivos javascript que inicialicen su base de datos
  • cree una imagen acoplable derivada de MongoDB que contenga estos archivos

Hay muchas respuestas que usan contenedores desechables o crean volúmenes y los vinculan, pero esto parece demasiado complicado. Si observa el docker-entrypoint.sh de la imagen docker de mongo, verá que la línea 206 ejecuta /docker-entrypoint-initdb.d/*.js archivos en la inicialización usando una sintaxis:mongo <db> <js-file> . Si crea una imagen acoplable derivada de MongoDB que contiene sus datos semilla, puede:

  • tener un solo comando de ejecución de la ventana acoplable que levanta un mongo con datos semilla
  • tener datos persistentes a través de paradas e inicios del contenedor
  • restablezca esos datos con los comandos docker stop, rm y run
  • implemente fácilmente con programadores de tiempo de ejecución como k8s, mesos, swarm, rancher

Este enfoque es especialmente adecuado para:

  • POC que solo necesitan algunos datos realistas para mostrar
  • Tubos de CI/CD que necesitan datos consistentes para pruebas de caja negra
  • implementaciones de ejemplo para demostraciones de productos (ingenieros de ventas, propietarios de productos)

Cómo:

  1. Cree y pruebe sus scripts de inicialización (datos de preparación según corresponda)
  2. Cree un Dockerfile para su imagen derivada que copie sus scripts de inicio

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Cree su imagen acoplable

    docker build -t mongo-sample-data:3.4 .
    
  4. Opcionalmente, envíe su imagen a un registro acoplable para que otros la usen

  5. Ejecute su imagen acoplable

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

De forma predeterminada, docker-entrypoint.sh aplicará sus scripts a la test base de datos; el comando de ejecución anterior env var MONGO_INITDB_DATABASE=application aplicará estos scripts a la application db en su lugar. Alternativamente, puede crear y cambiar a diferentes bases de datos en el archivo js.

Tengo un repositorio de github que hace exactamente esto:aquí están los archivos relevantes.