MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Инициализирайте данни за докеризирано монго

По-самостоятелен подход:

  • създайте javascript файлове, които инициализират вашата база данни
  • създайте извлечено изображение на докер MongoDB, което съдържа тези файлове

Има много отговори, които използват контейнери за еднократна употреба или създават томове и ги свързват, но това изглежда твърде сложно. Ако погледнете docker-entrypoint.sh на изображението на mongo docker, ще видите, че ред 206 изпълнява /docker-entrypoint-initdb.d/*.js файлове при инициализация с помощта на синтаксис:mongo <db> <js-file> . Ако създадете извлечено докер изображение на MongoDB, което съдържа вашите начални данни, можете:

  • да има една команда за стартиране на docker, която изправя монго с начални данни
  • данните се запазват чрез спирания и стартирания на контейнера
  • нулирайте тези данни с докер стоп, rm и команди за изпълнение
  • Лесно внедряване с планировчици по време на изпълнение като k8s, mesos, swarm, rancher

Този подход е особено подходящ за:

  • POC, които просто се нуждаят от реалистични данни за показване
  • CI/CD тръбопроводи, които се нуждаят от последователни данни за тестване на черна кутия
  • примерно внедряване за демонстрации на продукти (инженери по продажбите, собственици на продукти)

Как да:

  1. Създайте и тествайте своите скриптове за инициализиране (данни за подреждане според случая)
  2. Създайте Dockerfile за вашето извлечено изображение, което копира вашите скриптове за инициализиране

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Създайте своя докер образ

    docker build -t mongo-sample-data:3.4 .
    
  4. По желание изпратете изображението си в докер регистър, за да го използват други

  5. Стартирайте вашето изображение на Docker

    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 ще приложи вашите скриптове към test db; горната команда за изпълнение env var MONGO_INITDB_DATABASE=application ще приложи тези скриптове към application db вместо това. Като алтернатива можете да създадете и да превключите към различни dbs във файла js.

Имам репозитория на github, която прави точно това - ето съответните файлове.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB изтегля елемент от масив две нива дълбоко

  2. В NodeJS, как да изведете резултати от mongodb с различни имена на полета?

  3. Използване на MongoDB $pull за изтриване на документи в масив

  4. 3 лесни стъпки за подобряване на сигурността на вашата инсталация на MongoDB

  5. Управление на журналирането в MongoDB