En mere selvstændig tilgang:
- opret javascript-filer, der initialiserer din database
- opret et afledt MongoDB docker-billede, der indeholder disse filer
Der er mange svar, der bruger engangsbeholdere eller skaber volumener og forbinder dem, men det virker alt for kompliceret. Hvis du tager et kig på mongo docker-billedets docker-entrypoint.sh, ser du, at linje 206 udfører /docker-entrypoint-initdb.d/*.js
filer ved initialisering ved hjælp af en syntaks:mongo <db> <js-file>
. Hvis du opretter et afledt MongoDB docker-billede, der indeholder dine frødata, kan du:
- have en enkelt docker-run-kommando, der står op for en mongo med frødata
- have data bevares gennem containerstop og -starter
- nulstil disse data med docker stop-, rm- og run-kommandoer
- nem implementering med runtime-planlæggere som k8s, mesos, swarm, rancher
Denne tilgang er især velegnet til:
- POC'er, der bare har brug for nogle realistiske data til visning
- CI/CD-pipelines, der har brug for konsistente data til black box-testning
- eksempler på implementeringer af produktdemoer (salgsingeniører, produktejere)
Sådan gør du:
- Opret og test dine initialiseringsscripts (plejedata efter behov)
-
Opret en Dockerfile til dit afledte billede, der kopierer dine init-scripts
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
-
Byg dit docker-image
docker build -t mongo-sample-data:3.4 .
-
Skub eventuelt dit billede til et docker-register, som andre kan bruge
-
Kør dit docker-billede
docker run \ --name mongo-sample-data \ -p 27017:27017 \ --restart=always \ -e MONGO_INITDB_DATABASE=application \ -d mongo-sample-data:3.4
Som standard vil docker-entrypoint.sh anvende dine scripts til test
db; ovenstående kørselskommando env var MONGO_INITDB_DATABASE=application
vil anvende disse scripts til application
db i stedet for. Alternativt kan du oprette og skifte til forskellige dbs i js-filen.
Jeg har en github-repo, der gør netop dette - her er de relevante filer.