﻿1
00:00:05,810 --> 00:00:10,720
‫Dieser Abschnitt wird voll von Vorlesungen und Aufgaben rund um persistente Daten sein.

2
00:00:11,230 --> 00:00:16,490
‫Zuerst werden wir die Probleme persistenter Daten diskutieren und wie dies überhaupt

3
00:00:16,490 --> 00:00:18,280
‫zu einem Problem wurde.

4
00:00:18,290 --> 00:00:23,640
‫Wichtige Konzepte, die Sie verstehen müssen, sind die Idee einer unveränderlichen Infrastruktur.

5
00:00:23,810 --> 00:00:28,580
‫Und die Idee, dass Container von Natur aus kurzlebig sind.

6
00:00:28,880 --> 00:00:36,680
‫Wir werden diese in der ersten Vorlesung behandeln. Dann werden wir uns mit den Datenmengen befassen und wie diese

7
00:00:36,680 --> 00:00:44,270
‫einige unserer Probleme im Zusammenhang mit persistenten Daten lösen. Dann werden wir uns auch mit Bindungs-Mounts befassen und wie

8
00:00:44,360 --> 00:00:50,660
‫dies verschiedene Probleme mit persistenten Daten löst. Am Ende dieses Abschnitts finden Sie einige Anweisungen zum

9
00:00:50,720 --> 00:00:57,530
‫Speichern von Datenbankdaten und zum Ersetzen von Containern für Datenbanken. Und dann auch, um tatsächlich Code

10
00:00:57,740 --> 00:01:03,320
‫vom Host in einen Container zu mounten, während Sie ihn bearbeiten, damit

11
00:01:03,320 --> 00:01:11,560
‫Sie diesen Code live im Container ausführen können. Die Voraussetzungen für diese erste Vorlesung sind lediglich das Verstehen,

12
00:01:11,560 --> 00:01:16,970
‫wie Container ausgeführt werden, und die Container- und Image-Konzepte, die wir bisher besprochen haben.

13
00:01:17,050 --> 00:01:23,230
‫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

14
00:01:23,230 --> 00:01:24,920
‫werden, wenn ein Container ausgeführt wird.

15
00:01:25,840 --> 00:01:29,200
‫Container sollen unveränderlich und vergänglich sein.

16
00:01:29,320 --> 00:01:34,220
‫Das sind nur ausgefallene Schlagworte für unveränderlich und vorübergehend oder wegwerfbar.

17
00:01:34,480 --> 00:01:40,180
‫Die Idee dabei ist, dass wir einfach einen Container wegwerfen und aus einem Bild einen neuen erstellen können,

18
00:01:40,180 --> 00:01:40,770
‫oder?

19
00:01:41,790 --> 00:01:47,820
‫Dann sprechen wir nicht von einer tatsächlichen Beschränkung der Container, sondern eher von einem Entwurfsziel oder

20
00:01:47,820 --> 00:01:49,070
‫einer Best Practice.

21
00:01:49,080 --> 00:01:54,690
‫Dies ist die Idee einer unveränderlichen Infrastruktur, in der wir die Dinge nicht ändern, sobald sie ausgeführt werden.

22
00:01:54,840 --> 00:02:00,330
‫Wenn eine Konfigurationsänderung erforderlich ist oder ein Upgrade der Containerversion erforderlich ist, stellen wir

23
00:02:00,330 --> 00:02:02,420
‫einen neuen Container bereit.

24
00:02:02,490 --> 00:02:08,370
‫Dies bringt uns enorme Vorteile in Bezug auf Zuverlässigkeit und Konsistenz sowie die Reproduzierbarkeit von Änderungen.

25
00:02:08,490 --> 00:02:10,350
‫Aber es gibt einen Kompromiss.

26
00:02:10,350 --> 00:02:16,140
‫Was ist mit den eindeutigen Daten, die Ihre App erzeugt? Diese Datenbanken oder ein Schlüsselwertspeicher oder irgendetwas anderes, das

27
00:02:16,140 --> 00:02:18,150
‫Ihre App in eine Datei ausspuckt?

28
00:02:18,330 --> 00:02:24,810
‫Im Idealfall sollten die Container keine eindeutigen Daten enthalten, die mit den Anwendungsbinärdateien vermischt sind. Dies ist als "Trennung von

29
00:02:24,810 --> 00:02:30,340
‫Bedenken" bekannt, und Docker bietet uns hier tatsächlich einen großen Vorteil.

30
00:02:30,450 --> 00:02:36,780
‫Wir können unsere Anwendung aktualisieren, indem wir einen neuen Container mit einer aktualisierten Version unserer App neu erstellen. Im Idealfall befinden sich

31
00:02:36,990 --> 00:02:42,530
‫unsere eindeutigen Daten noch dort, wo sie benötigt werden, und wurden für uns aufbewahrt, während unser Container recycelt wurde.

32
00:02:42,540 --> 00:02:48,510
‫Falls Sie es bisher nicht bemerkt haben, waren die von uns verwendeten Container standardmäßig persistent.

33
00:02:48,510 --> 00:02:53,880
‫Alle Änderungen an diesen wurden während des Neustarts und Neustarts beibehalten, bis der Container entfernt wurde.

34
00:02:54,240 --> 00:02:57,160
‫Nur weil wir den Container gestoppt oder den Host neu

35
00:02:57,300 --> 00:03:00,030
‫gestartet haben, gehen die Dateiänderungen des Containers nicht verloren.

36
00:03:00,210 --> 00:03:05,910
‫Erst wenn wir den Container entfernen, verschwindet die UFS-Ebene, aber wir möchten dies nach

37
00:03:05,910 --> 00:03:07,160
‫Belieben tun können.

38
00:03:07,170 --> 00:03:13,320
‫Dieses Problem der eindeutigen Daten ist in der Branche als "persistente Daten" bekannt, und bis

39
00:03:13,320 --> 00:03:19,230
‫auf Container hatten wir keinen Namen dafür. Weil die meisten Dinge, die wir erstellt haben, persistent waren, so

40
00:03:19,230 --> 00:03:24,090
‫wie Sie diese alten Server kennen, auf denen diese alte App seit fünf oder zehn Jahren oder länger ausgeführt wird.

41
00:03:24,270 --> 00:03:26,850
‫Standardmäßig war alles beständig.

42
00:03:26,850 --> 00:03:32,400
‫In der neuen Welt der automatischen Skalierung von Containern und Anwendungen verursachen persistente Daten ein

43
00:03:32,400 --> 00:03:33,280
‫einzigartiges Problem.

44
00:03:33,420 --> 00:03:36,640
‫Docker bietet zwei Lösungen für dieses

45
00:03:36,720 --> 00:03:42,450
‫Problem: "Datenvolumes" und "Bindmounts". "Docker - Volumes sind eine Konfigurationsoption

46
00:03:42,450 --> 00:03:46,620
‫für einen Container, der einen speziellen Speicherort außerhalb des Union -

47
00:03:46,620 --> 00:03:50,130
‫Dateisystems des Containers erstellt, um eindeutige Daten zu speichern.

48
00:03:50,210 --> 00:03:55,470
‫Dadurch bleibt es über Containerentnahmen hinweg erhalten und wir können es an jedem gewünschten Container anbringen.

49
00:03:55,940 --> 00:03:58,210
‫Und der Container sieht es einfach wie einen lokalen Dateipfad.

50
00:03:58,440 --> 00:04:05,670
‫Dann gibt es Bind-Mounts, bei denen wir einfach ein Host-Verzeichnis oder eine Datei in einen Container freigeben oder einbinden.

51
00:04:05,970 --> 00:04:10,470
‫Auch hier sieht es für den Container nur wie ein lokaler Dateipfad oder ein Verzeichnispfad aus.

52
00:04:10,470 --> 00:04:12,590
‫Es wird nicht wirklich wissen, dass es vom Host kommt.

