‫Dieser Abschnitt wird voll von Vorlesungen und Aufgaben rund um persistente Daten sein.
‫Zuerst werden wir die Probleme persistenter Daten diskutieren und wie dies überhaupt
‫zu einem Problem wurde.
‫Wichtige Konzepte, die Sie verstehen müssen, sind die Idee einer unveränderlichen Infrastruktur.
‫Und die Idee, dass Container von Natur aus kurzlebig sind.
‫Wir werden diese in der ersten Vorlesung behandeln. Dann werden wir uns mit den Datenmengen befassen und wie diese
‫einige unserer Probleme im Zusammenhang mit persistenten Daten lösen. Dann werden wir uns auch mit Bindungs-Mounts befassen und wie
‫dies verschiedene Probleme mit persistenten Daten löst. Am Ende dieses Abschnitts finden Sie einige Anweisungen zum
‫Speichern von Datenbankdaten und zum Ersetzen von Containern für Datenbanken. Und dann auch, um tatsächlich Code
‫vom Host in einen Container zu mounten, während Sie ihn bearbeiten, damit
‫Sie diesen Code live im Container ausführen können. Die Voraussetzungen für diese erste Vorlesung sind lediglich das Verstehen,
‫wie Container ausgeführt werden, und die Container- und Image-Konzepte, die wir bisher besprochen haben.
‫Bisher haben Sie sich nur Gedanken darüber gemacht, was zum Ausführen eines Containers erforderlich ist, nicht über die eindeutigen Daten, die möglicherweise erstellt
‫werden, wenn ein Container ausgeführt wird.
‫Container sollen unveränderlich und vergänglich sein.
‫Das sind nur ausgefallene Schlagworte für unveränderlich und vorübergehend oder wegwerfbar.
‫Die Idee dabei ist, dass wir einfach einen Container wegwerfen und aus einem Bild einen neuen erstellen können,
‫oder?
‫Dann sprechen wir nicht von einer tatsächlichen Beschränkung der Container, sondern eher von einem Entwurfsziel oder
‫einer Best Practice.
‫Dies ist die Idee einer unveränderlichen Infrastruktur, in der wir die Dinge nicht ändern, sobald sie ausgeführt werden.
‫Wenn eine Konfigurationsänderung erforderlich ist oder ein Upgrade der Containerversion erforderlich ist, stellen wir
‫einen neuen Container bereit.
‫Dies bringt uns enorme Vorteile in Bezug auf Zuverlässigkeit und Konsistenz sowie die Reproduzierbarkeit von Änderungen.
‫Aber es gibt einen Kompromiss.
‫Was ist mit den eindeutigen Daten, die Ihre App erzeugt? Diese Datenbanken oder ein Schlüsselwertspeicher oder irgendetwas anderes, das
‫Ihre App in eine Datei ausspuckt?
‫Im Idealfall sollten die Container keine eindeutigen Daten enthalten, die mit den Anwendungsbinärdateien vermischt sind. Dies ist als "Trennung von
‫Bedenken" bekannt, und Docker bietet uns hier tatsächlich einen großen Vorteil.
‫Wir können unsere Anwendung aktualisieren, indem wir einen neuen Container mit einer aktualisierten Version unserer App neu erstellen. Im Idealfall befinden sich
‫unsere eindeutigen Daten noch dort, wo sie benötigt werden, und wurden für uns aufbewahrt, während unser Container recycelt wurde.
‫Falls Sie es bisher nicht bemerkt haben, waren die von uns verwendeten Container standardmäßig persistent.
‫Alle Änderungen an diesen wurden während des Neustarts und Neustarts beibehalten, bis der Container entfernt wurde.
‫Nur weil wir den Container gestoppt oder den Host neu
‫gestartet haben, gehen die Dateiänderungen des Containers nicht verloren.
‫Erst wenn wir den Container entfernen, verschwindet die UFS-Ebene, aber wir möchten dies nach
‫Belieben tun können.
‫Dieses Problem der eindeutigen Daten ist in der Branche als "persistente Daten" bekannt, und bis
‫auf Container hatten wir keinen Namen dafür. Weil die meisten Dinge, die wir erstellt haben, persistent waren, so
‫wie Sie diese alten Server kennen, auf denen diese alte App seit fünf oder zehn Jahren oder länger ausgeführt wird.
‫Standardmäßig war alles beständig.
‫In der neuen Welt der automatischen Skalierung von Containern und Anwendungen verursachen persistente Daten ein
‫einzigartiges Problem.
‫Docker bietet zwei Lösungen für dieses
‫Problem: "Datenvolumes" und "Bindmounts". "Docker - Volumes sind eine Konfigurationsoption
‫für einen Container, der einen speziellen Speicherort außerhalb des Union -
‫Dateisystems des Containers erstellt, um eindeutige Daten zu speichern.
‫Dadurch bleibt es über Containerentnahmen hinweg erhalten und wir können es an jedem gewünschten Container anbringen.
‫Und der Container sieht es einfach wie einen lokalen Dateipfad.
‫Dann gibt es Bind-Mounts, bei denen wir einfach ein Host-Verzeichnis oder eine Datei in einen Container freigeben oder einbinden.
‫Auch hier sieht es für den Container nur wie ein lokaler Dateipfad oder ein Verzeichnispfad aus.
‫Es wird nicht wirklich wissen, dass es vom Host kommt.