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:
- Utwórz i przetestuj swoje skrypty inicjujące (odpowiednio do pielęgnacji danych)
-
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/
-
Zbuduj swój obraz dokowany
docker build -t mongo-sample-data:3.4 .
-
Opcjonalnie prześlij obraz do rejestru dokera, aby inni mogli go używać
-
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.