Samostatnější přístup:
- vytvářejte soubory javascript, které inicializují vaši databázi
- vytvořte odvozený obraz MongoDB dockeru, který obsahuje tyto soubory
Existuje mnoho odpovědí, které používají jednorázové kontejnery nebo vytvářejí svazky a spojují je, ale zdá se to příliš komplikované. Pokud se podíváte na docker-entrypoint.sh mongo docker obrázku, uvidíte, že řádek 206 spouští /docker-entrypoint-initdb.d/*.js
soubory při inicializaci pomocí syntaxe:mongo <db> <js-file>
. Pokud vytvoříte odvozený obraz MongoDB dockeru, který obsahuje vaše počáteční data, můžete:
- mají jeden příkaz ke spuštění dockeru, který postaví mongo s počátečními daty
- udržovat data během zastavení a spuštění kontejneru
- resetujte tato data pomocí příkazů docker stop, rm a run
- snadné nasazení pomocí plánovačů běhu, jako jsou k8s, mesos, swarm, rancher
Tento přístup je zvláště vhodný pro:
- POC, která k zobrazení potřebují pouze realistická data
- CI/CD kanály, které potřebují konzistentní data pro testování černé skříňky
- příklady nasazení pro ukázky produktů (prodejní technici, vlastníci produktů)
Jak na to:
- Vytvořte a otestujte své inicializační skripty (podle potřeby upravte data)
-
Vytvořte Dockerfile pro svůj odvozený obrázek, který zkopíruje vaše init skripty
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
-
Vytvořte si svůj docker image
docker build -t mongo-sample-data:3.4 .
-
Volitelně odešlete svůj obrázek do registru dockeru, aby jej mohli používat ostatní
-
Spusťte svůj docker image
docker run \ --name mongo-sample-data \ -p 27017:27017 \ --restart=always \ -e MONGO_INITDB_DATABASE=application \ -d mongo-sample-data:3.4
Ve výchozím nastavení docker-entrypoint.sh použije vaše skripty na test
db; výše uvedený příkaz spusťte env var MONGO_INITDB_DATABASE=application
použije tyto skripty na application
db místo toho. Alternativně můžete vytvořit a přepnout na různé databáze db v souboru js.
Mám github repo, které dělá právě toto - zde jsou příslušné soubory.