MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zainicjuj dane na zadokowanym mongo

Bardziej samodzielne podejście:

  • utwórz pliki javascript, które inicjują Twoją bazę danych
  • utwórz pochodny obraz dokowany MongoDB, który zawiera te pliki

Istnieje wiele odpowiedzi, które używają jednorazowych pojemników lub tworzą woluminy i łączą je, ale wydaje się to zbyt skomplikowane. Jeśli spojrzysz na plik docker-entrypoint.sh obrazu docker mongo, zobaczysz, że wiersz 206 wykonuje /docker-entrypoint-initdb.d/*.js pliki przy inicjalizacji przy użyciu składni:mongo <db> <js-file> . Jeśli utworzysz pochodny obraz dokowany MongoDB, który zawiera dane początkowe, możesz:

  • miej pojedyncze polecenie uruchomienia dockera, które wstawia mongo z danymi nasion
  • utrwalanie danych przez zatrzymywanie i uruchamianie kontenera
  • zresetuj te dane za pomocą poleceń docker stop, rm i run
  • łatwe wdrożenie dzięki harmonogramom czasu wykonywania, takim jak k8s, mesos, swarm, rancher

To podejście jest szczególnie przydatne w przypadku:

  • POC, które potrzebują tylko realistycznych danych do wyświetlenia
  • Potoki CI/CD, które wymagają spójnych danych do testowania czarnej skrzynki
  • przykładowe wdrożenia demonstracji produktów (inżynierowie sprzedaży, właściciele produktów)

Jak:

  1. Utwórz i przetestuj swoje skrypty inicjujące (odpowiednio do pielęgnacji danych)
  2. Utwórz plik Dockerfile dla obrazu pochodnego, który skopiuje twoje skrypty startowe

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. Zbuduj swój obraz dokowany

    docker build -t mongo-sample-data:3.4 .
    
  4. Opcjonalnie prześlij obraz do rejestru dokera, aby inni mogli go używać

  5. Uruchom obraz dokowany

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

Domyślnie docker-entrypoint.sh zastosuje twoje skrypty do test db; powyższe polecenie uruchomienia env var MONGO_INITDB_DATABASE=application zastosuje te skrypty do application db zamiast. Alternatywnie możesz utworzyć i przełączyć się na różne dbs w pliku js.

Mam repozytorium github, które właśnie to robi — oto odpowiednie pliki.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Stowarzyszenie Wiele-do-Wiele

  2. Jak stworzyć DB dla kontenera MongoDB przy starcie?

  3. MongoDB $ceil

  4. Jak znaleźć nazwę pola MongoDB na dowolnej głębokości?

  5. Wdrażanie i konfiguracja fragmentów MongoDB za pomocą Ansible