Ett mer självständigt tillvägagångssätt:
- skapa javascript-filer som initierar din databas
- skapa en härledd MongoDB docker-bild som innehåller dessa filer
Det finns många svar som använder engångsbehållare eller skapar volymer och länkar dem, men detta verkar alltför komplicerat. Om du tittar på mongo docker-bildens docker-entrypoint.sh ser du att rad 206 kör /docker-entrypoint-initdb.d/*.js
filer vid initiering med en syntax:mongo <db> <js-file>
. Om du skapar en härledd MongoDB docker-bild som innehåller dina frödata kan du:
- ha ett enda docker-körningskommando som står upp för en mongo med frödata
- ha data bevaras genom containerstopp och start
- återställ dessa data med kommandon docker stop, rm och run
- implementera enkelt med körtidsschemaläggare som k8s, mesos, swarm, rancher
Detta tillvägagångssätt är särskilt väl lämpat för:
- POC:er som bara behöver lite realistisk data för visning
- CI/CD-pipelines som behöver konsekventa data för black box-testning
- exempelimplementeringar för produktdemonstrationer (säljingenjörer, produktägare)
Så här gör du:
- Skapa och testa dina initialiseringsskript (grooming data vid behov)
-
Skapa en Dockerfil för din härledda bild som kopierar dina init-skript
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
-
Bygg din docker-bild
docker build -t mongo-sample-data:3.4 .
-
Eventuellt kan du skicka din bild till ett dockningsregister som andra kan använda
-
Kör din docker-bild
docker run \ --name mongo-sample-data \ -p 27017:27017 \ --restart=always \ -e MONGO_INITDB_DATABASE=application \ -d mongo-sample-data:3.4
Som standard kommer docker-entrypoint.sh att tillämpa dina skript på test
db; ovanstående körkommando env var MONGO_INITDB_DATABASE=application
kommer att tillämpa dessa skript på application
db istället. Alternativt kan du skapa och byta till olika dbs i js-filen.
Jag har en github-repo som gör just detta - här är de relevanta filerna.