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.
→
→
→
→
→
→
Bitte beachten Sie, dass dieses Material mit Docker Version 18.09.1 und API Version erstellt wurde. .
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 Mounting von tmpfs und die Technologie des Bind Mounts.

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_volumeBei 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 lsEinen 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_volumeUm alle Volumes zu löschen, die von Containern nicht verwendet werden, können Sie den folgenden Befehl verwenden:
docker volume pruneVor 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 pruneDieser 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 , oder . Hier sprechen wir von Volumes, also interessiert uns der Wertvolume.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 aufsrc.abgekürzt werden— der Pfad, an dem die Datei oder der Ordner im Container gemountet wird. Dieser Schlüssel kann aufabgekürzt werdenodertarget.readonly— montiert ein Volume, das vorgesehen ist . 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_imageErgebnisse
Hier sind nützliche Befehle für die Arbeit mit Docker-Volumes:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker 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=volumesource=volume_namedestination=/path/in/containerreadonly
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. ein großartiger Artikel über Docker. ein Buch über Docker (wenn Sie dieses Buch kaufen, versuchen Sie, die neueste Auflage zu bekommen). 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?
Quelle: habr.com
