Docker verstehen, Teil 6: Datenmanagement

Im heutigen Abschnitt unserer Übersetzung der Docker-Materialien sprechen wir über das Arbeiten mit Daten, insbesondere über Docker-Volumes. In diesen Materialien haben wir die Softwaremechanismen von Docker immer wieder mit verschiedenen essbaren Analogien verglichen. Lassen Sie uns auch hier dieser Tradition treu bleiben. Die Daten in Docker können als Gewürze betrachtet werden. Es gibt viele Arten von Gewürzen in der Welt, und in Docker viele Methoden, um mit Daten zu arbeiten.

Teil 1: Grundlagen
Teil 2: Begriffe und Konzepte
Teil 3: Dockerfile-Dateien
Teil 4: Reduzierung der Bildgrößen und Beschleunigung des Builds
Teil 5: Kommandos
Teil 6: Datenmanagement

Docker verstehen, Teil 6: Datenmanagement

Bitte beachten Sie, dass dieses Material mit Docker Version 18.09.1 und API Version erstellt wurde. 1.39.

In Docker können Daten entweder temporär oder dauerhaft gespeichert werden. Lassen Sie uns mit temporären Daten beginnen.

Temporäre Datenspeicherung

In Docker-Containern kann die Arbeit mit temporären Daten auf zwei Arten organisiert werden.

Standardmäßig werden die von einer in einem Container laufenden Anwendung erstellten Dateien im schreibbaren Schicht des Containers gespeichert. Für die Funktionalität dieses Mechanismus sind keine speziellen Einstellungen erforderlich. Es ist einfach und kostengünstig. Die Anwendung muss lediglich Daten speichern und kann weiterhin ihren Aufgaben nachgehen. Allerdings gehen die auf diese einfache Weise gespeicherten Daten verloren, sobald der Container nicht mehr existiert.

Für die Speicherung temporärer Dateien in Docker gibt es eine weitere Lösung, die für Fälle geeignet ist, in denen eine höhere Leistungsstufe erforderlich ist als die, die mit dem standardmäßigen Mechanismus zur temporären Datenspeicherung erreicht werden kann. Wenn es Ihnen nicht wichtig ist, dass Ihre Daten länger als die Lebensdauer des Containers erhalten bleiben, können Sie tmpfs – einen temporären Speicher, der den Arbeitsspeicher des Hosts nutzt – an den Container anschließen. Dies beschleunigt die Lese- und Schreiboperationen.

Es kommt häufig vor, dass Daten gespeichert werden müssen, auch nachdem der Container nicht mehr existiert. Dafür benötigen wir Mechanismen zur permanenten Datenspeicherung.

Permanente Datenspeicherung

Es gibt zwei Möglichkeiten, um die Lebensdauer von Daten über die Lebensdauer des Containers hinaus zu verlängern. Eine Möglichkeit besteht darin, die Technologie des Bind Mounts zu verwenden. Bei diesem Ansatz kann beispielsweise ein tatsächlich existierender Ordner an den Container eingebunden werden. Prozesse außerhalb von Docker können auf die in diesem Ordner gespeicherten Daten zugreifen. So sieht das aus Mounting von tmpfs und die Technologie des Bind Mounts.

Docker verstehen, Teil 6: Datenmanagement
Mounting von tmpfs und Bind Mount

Die Nachteile der Verwendung von Bind Mounts bestehen darin, dass ihre Nutzung die Datensicherung, Migration und den gemeinsamen Zugriff auf Daten durch mehrere Container kompliziert. Für die permanente Datenspeicherung ist die Verwendung von Docker Volumes weitaus besser.

Docker Volumes

Ein Volume ist ein Dateisystem, das sich auf der Host-Maschine außerhalb der Container befindet. Docker kümmert sich um die Erstellung und Verwaltung der Volumes. Hier sind die Hauptmerkmale von Docker Volumes:

  • Sie sind Lösungen für die dauerhafte Speicherung von Informationen.
  • Sie sind autonom und von Containern getrennt.
  • Verschiedene Container können sie gemeinsam nutzen.
  • Sie ermöglichen ein effektives Lesen und Schreiben von Daten.
  • Volumes können auf den Ressourcen eines entfernten Cloud-Anbieters platziert werden.
  • Sie können verschlüsselt werden.
  • Sie können benannt werden.
  • Ein Container kann das Vorladen von Daten in ein Volume organisieren.
  • Sie sind praktisch für Tests.

Wie Sie sehen, verfügen Docker-Volumes über bemerkenswerte Eigenschaften. Lassen Sie uns darüber sprechen, wie man sie erstellt.

Volumes erstellen

Volumes können mit Docker-Tools oder über API-Anfragen erstellt werden.

Hier ist eine Anweisung in Dockerfile, die es ermöglicht, ein Volume beim Start eines Containers zu erstellen.

VOLUME /my_volume

Bei Verwendung einer solchen Anweisung erstellt Docker nach der Container-Erstellung ein Volume, das die Daten enthält, die bereits an dem angegebenen Ort vorhanden sind. Beachten Sie, dass die Erstellung eines Volumes mit Dockerfile Sie nicht von der Notwendigkeit befreit, einen Mount-Punkt für das Volume anzugeben.

Volumes in Dockerfile können auch im JSON-Format erstellt werden.

Darüber hinaus können Volumes über die Befehlszeile während des Betriebs des Containers erstellt werden.

Arbeiten mit Volumes über die Befehlszeile

▍Erstellen eines Volumes

Ein eigenständiges Volume kann mit folgendem Befehl erstellt werden:

docker volume create --name my_volume

▍Informationen über Volumes abrufen

Um die Liste der Docker-Volumes anzuzeigen, verwenden Sie den folgenden Befehl:

docker volume ls

Einen bestimmten Volume können Sie wie folgt untersuchen:

docker volume inspect my_volume

▍Löschen eines Volumes

Ein Volume kann folgendermaßen gelöscht werden:

docker volume rm my_volume

Um alle Volumes zu löschen, die von Containern nicht verwendet werden, können Sie den folgenden Befehl verwenden:

docker volume prune

Vor dem Löschen von Docker-Volumes wird um Ihre Bestätigung für diese Aktion gebeten.

Wenn ein Volume mit einem Container verbunden ist, kann dieses Volume nicht gelöscht werden, bis der entsprechende Container entfernt wurde. Selbst wenn der Container gelöscht wird, versteht Docker dies nicht immer. Sollte dies der Fall sein, können Sie den folgenden Befehl verwenden:

docker system prune

Dieser Befehl dient dazu, Ressourcen von Docker zu bereinigen. Nach der Ausführung dieses Befehls sollten Sie in der Lage sein, Volumes zu löschen, deren Status zuvor falsch definiert wurde.

Die Flags --mount und --volume

Um mit Volumes zu arbeiten, müssen Sie oft beim Ausführen des Befehls dockerviele Flags verwenden. Um beispielsweise während der Erstellung eines Containers ein Volume zu erstellen, können Sie folgende Konstruktion verwenden:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

Früher (vor 2017) war das Flag --volumesehr beliebt. Ursprünglich wurde dieses Flag (es kann auch in abgekürzter Form verwendet werden, dann sieht es so aus wie -v) für unabhängige Container verwendet, während das Flag --mount in der Docker Swarm-Umgebung eingesetzt wurde. Seit Docker 17.06 kann das Flag --mount jedoch in allen Szenarien verwendet werden.

Es ist anzumerken, dass die Verwendung des Flags --mount die Menge an zusätzlichen Daten erhöht, die Sie im Befehl angeben müssen, aber aus mehreren Gründen ist es besser, genau dieses Flag zu verwenden und nicht das --volume. Das Flag --mount , da es der einzige Mechanismus ist, der es ermöglicht, mit Services zu arbeiten oder Treiberparameter für Volumes anzugeben. Zudem ist die Arbeit mit diesem Flag einfacher.

In bestehenden Beispielen von Befehlen, die auf die Arbeit mit Daten in Docker abzielen, finden Sie viele Beispiele für die Verwendung des Flags -v. Wenn Sie versuchen, diese Befehle für sich anzupassen, beachten Sie, dass Flags --mount und --volume Sie verwenden verschiedene Parameterformate. Das bedeutet, dass man nicht einfach ersetzen kann -v findet man --mount und einen funktionierenden Befehl erhält.

Der Hauptunterschied zwischen --mount und --volume liegt darin, dass beim Einsatz des Flags --volume alle Parameter zusammen in einem Feld gesammelt werden, während bei der Verwendung von --mount die Parameter getrennt werden.

Wenn Sie mit --mount arbeiten, werden die Parameter als Schlüssel-Wert-Paare dargestellt, das heißt, es sieht aus wie key=value. Diese Paare werden durch Kommas getrennt. Hier sind häufig verwendete Parameter: --mount:

  • type — Typ der Montage. Der Wert für den entsprechenden Schlüssel kann sein bind, volume oder tmpfs. Hier sprechen wir von Volumes, also interessiert uns der Wert volume.
  • source — Quelle der Montage. Für benannte Volumes ist dies der Name des Volumes. Für unbenannte Volumes wird dieser Schlüssel nicht angegeben. Er kann auf src.
  • abgekürzt werden — der Pfad, an dem die Datei oder der Ordner im Container gemountet wird. Dieser Schlüssel kann auf abgekürzt werden oder target.
  • readonly — montiert ein Volume, das vorgesehen ist nur zum Lesen. Die Verwendung dieses Schlüssels ist optional, ihm wird kein Wert zugewiesen.

Hier ist ein Beispiel für die Verwendung --mount mit vielen Parametern:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Ergebnisse

Hier sind nützliche Befehle für die Arbeit mit Docker-Volumes:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Hier ist eine Liste häufig verwendeter Parameter für --mount, die in Befehlen wie docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Jetzt, da wir diese Reihe von Materialien über Docker abgeschlossen haben, ist es an der Zeit, ein paar Worte darüber zu verlieren, wohin sich diejenigen, die Docker lernen, weiter bewegen können. Hier ein großartiger Artikel über Docker. Hier ein Buch über Docker (wenn Sie dieses Buch kaufen, versuchen Sie, die neueste Auflage zu bekommen). Hier ein weiteres Buch, das für diejenigen geeignet ist, die glauben, dass praktische Erfahrung der beste Weg ist, Technologien zu erlernen.

Sehr geehrte Leser! Welche Materialien über Docker würden Sie Anfängern empfehlen?

Docker verstehen, Teil 6: Datenmanagement

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster