По-самостоятелен подход:
- създайте 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 тръбопроводи, които се нуждаят от последователни данни за тестване на черна кутия
- примерно внедряване за демонстрации на продукти (инженери по продажбите, собственици на продукти)
Как да:
- Създайте и тествайте своите скриптове за инициализиране (данни за подреждане според случая)
-
Създайте Dockerfile за вашето извлечено изображение, което копира вашите скриптове за инициализиране
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
-
Създайте своя докер образ
docker build -t mongo-sample-data:3.4 .
-
По желание изпратете изображението си в докер регистър, за да го използват други
-
Стартирайте вашето изображение на 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, която прави точно това - ето съответните файлове.