Nachdem ich die Dokumente gelesen hatte, war ich etwas verwirrt darüber, wie produktive Anwendungs- / Servicedaten am besten verwaltet werden können.
Es scheint 3 Möglichkeiten zu geben:
- Ordnen Sie das Volume einfach dem Host-Verzeichnis zu (dh dem
-v
Argument fürdocker run
). - Erstellen Sie ein Docker-Container-Image für Daten (dh separate Container und
--volumes-from
) - Docker-Volume erstellen (z. B.
docker volume create
)
Nun scheint es, dass die akzeptierte Praxis Option # 2 ist, aber dann frage ich mich, was der Zweck von # 3 ist.
Insbesondere wie gehen Sie mit diesen Szenarien richtig um docker volume
und ist es besser, einen Datenvolumencontainer zu verwenden oder dies für jede Situation?
- Sie benötigen Anwendungsdaten in einem separaten Volume und / oder einer separaten Speicherebene auf Ihrem Server
- Sichern
- Daten wiederherstellen
btrfs scrub
können, um beschädigte Dateien zu finden und zu korrigieren. Ich bin mir nicht sicher, wie dockerisiertes Material funktioniert, aber ich vermute, es schützt nicht vor Datenfäule. Ich benötige daher immer eine vollständige Wiederherstellung, wenn etwas Schlimmes passiert, anstatt nur einzelne Dateien wiederherzustellen. Ein anderer Gedanke ist, dass es eine weitere Abstraktionsebene hinzufügt, wodurch das Lesen und Schreiben von Dateien noch mehr verlangsamt wird. Ich sehe die Vorteile von # 2 und # 3 irgendwie nicht, aber ich habe keine Erfahrung mit Docker, daher könnte sich dies ändern.Antworten:
Ich denke, # 2 und # 3 sind so ziemlich dasselbe, der Hauptunterschied ist, dass es keinen gestoppten Container mit # 3 gibt (es ist buchstäblich nur ein benanntes Volume). Sie können beispielsweise ein benanntes Volume erstellen und
-v
stattdessen auf ähnliche Weise wie mit # 2 vorgehen.Erstellen Sie ein benanntes Volume:
Hängen Sie einige Daten aus einem Container in dieses Volume ein und schreiben Sie sie:
Sie können dann dasselbe
test
Volume in einem anderen Container bereitstellen und die Daten lesen:Der Vorteil hierbei ist, dass das Volume nicht versehentlich verschwindet, wenn Sie den Nur-Daten-Container entfernen. Sie verwalten es jetzt mit dem
docker volume
Unterbefehl.Es eröffnet auch die Möglichkeit für Volume-Treiber, sodass Sie möglicherweise freigegebene Volumes zwischen Hosts (dh benannte Volumes über NFS) ausführen können. Beispiele hierfür sind Flocker und Convoy . Convoy verfügt über spezifische Unterbefehle zum Sichern von Daten und ermöglicht die Speicherung auf NFS oder EBS außerhalb Ihres Hosts.
Aus diesem Grund denke ich, dass die neuere Methode (Docker 1.9+) darin besteht, ein benanntes Volume anstelle eines reinen Datencontainers zu verwenden.
quelle
the volume won't accidentally disappear if you remove the data-only container
. Könnten Sie näher darauf eingehen? Vielen Dank.Ab Docker 1.9 wird das Erstellen von benannten Volumes mit der Volumes-API (
docker volume create --name mydata
) einem Datenvolumen-Container vorgezogen. Ab Februar 2016 ist die Dokumentation der Docker- Bände leider nicht mehr aktuell. Die Leute bei Docker selbst schlagen vor, dass Datenträger- Container " nicht mehr als empfohlenes Muster angesehen werden", " benannte Datenträger in den meisten Fällen (wenn nicht in allen Fällen) reine Datenträger ersetzen können " und " kein Grund, den ich zu verwenden sehe" Nur-Daten-Container . “quelle