Ich versuche, eine Reihe verbundener Anwendungen zu verteilen, die in mehreren verknüpften Containern ausgeführt werden. Dazu gehört eine Mongo-Datenbank, die Folgendes benötigt:
- verteilt werden, die einige Startdaten enthalten;
- Benutzer können zusätzliche Daten hinzufügen.
Im Idealfall werden die Daten auch in einem verknüpften Datenvolumencontainer gespeichert.
Ich kann die Daten mongo
mithilfe einer mongo
Basisinstanz, die keine Volumes bereitstellt (Dockerhub-Image: psychemedia/mongo_nomount
- Dies ist im Wesentlichen die Basis-Mongo-Docker-Datei ohne die VOLUME /data/db
Anweisung), und einer Dockerfile
Konfiguration in der folgenden Richtung in den Container übertragen :
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
wo ./testdata.csv
befindet sich im selben Verzeichnis ( ./mongo-with-data
) wie die Docker-Datei.
Meine Docker-Compose-Konfigurationsdatei enthält Folgendes:
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# - ./db/mongo/:/data/db
#volumes_from:
# - devmongodata
#devmongodata:
# command: echo created
# image: busybox
# volumes:
# - /data/db
Wann immer ich versuche, ein VOLUME zu mounten, scheint es, als ob die ursprünglichen gesetzten Daten - die in gespeichert sind /data/db
- gelöscht werden. Ich denke, wenn ein Volume darauf gemountet wird, /data/db
ersetzt es alles, was gerade vorhanden ist.
Der Docker-Benutzerleitfaden schlägt jedoch Folgendes vor: Volumes werden beim Erstellen eines Containers initialisiert. Wenn das Basis-Image des Containers Daten am angegebenen Einhängepunkt enthält, werden diese vorhandenen Daten bei der Volume-Initialisierung in das neue Volume kopiert . Ich habe also erwartet, dass die Daten bestehen bleiben, wenn ich den Befehl VOLUME nach dem Seeding- RUN
Befehl platziere.
Also, was mache ich falsch?
Die lange Sicht ist, dass ich den Build mehrerer verknüpfter Container automatisieren und dann eine Vagrantfile
/ docker-compose YAML-Datei verteilen möchte, die eine Reihe verknüpfter Apps startet, die eine vorab gesetzte mongo
Datenbank mit einer (teilweise vorab ausgefüllten) Datenbank enthält ) persistenter Datencontainer.