In diesem Teil der Übersetzung der Materialreihe über Docker sprechen wir über den Umgang mit Daten, insbesondere über Docker-Volumes. In diesen Materialien haben wir die Softwaremechanismen von Docker ständig mit verschiedenen essbaren Analogien verglichen. Lassen Sie uns diese Tradition auch hier fortsetzen. Daten in Docker können als Gewürze betrachtet werden. In der Welt existiert eine Vielzahl von Gewürzen, und in Docker gibt es viele Möglichkeiten, mit Daten zu arbeiten.
→
→
→
→
→
→
Bitte beachten Sie, dass dieses Material mit der Docker-Engine Version 18.09.1 und der API-Version vorbereitet wurde. .
Daten in Docker können entweder temporär oder dauerhaft gespeichert werden. Lassen Sie uns mit temporären Daten beginnen.
Temporäre Datenspeicherung
In Docker-Containern kann der Umgang mit temporären Daten auf zwei Arten organisiert werden.
Standardmäßig werden Dateien, die von einer Anwendung innerhalb eines Containers erstellt werden, in der beschreibbaren Schicht des Containers gespeichert. Damit dieser Mechanismus funktioniert, sind keine speziellen Einstellungen erforderlich. Es ist einfach und kostengünstig. Die Anwendung muss lediglich die Daten speichern und kann ihre Arbeit fortsetzen. Allerdings verschwinden die auf diese einfache Weise gespeicherten Daten, sobald der Container nicht mehr existiert.
Für die Speicherung temporärer Dateien in Docker kann eine weitere Lösung in Betracht gezogen werden, die für Situationen geeignet ist, in denen eine höhere Leistungsstufe erforderlich ist als die, die durch die standardmäßige temporäre Datenspeicherung erreicht werden kann. Wenn Sie nicht möchten, dass Ihre Daten länger gespeichert werden als der Container existiert, können Sie tmpfs an den Container anhängen – ein temporärer Speicher, der den Hauptspeicher des Hosts verwendet. Dies beschleunigt die Lese- und Schreiboperationen.
Es kommt häufig vor, dass Daten gespeichert werden müssen, auch nachdem der Container nicht mehr existiert. Hierfür benötigen wir Mechanismen zur dauerhaften Datenspeicherung.
Permanente Datenspeicherung
Es gibt zwei Möglichkeiten, um die Lebensdauer von Daten über die Lebensdauer von Containern hinaus zu verlängern. Eine Möglichkeit besteht darin, die Technologie des Bind-Mounts zu verwenden. Bei diesem Ansatz kann ein tatsächlich vorhandener Ordner an den Container montiert werden. Mit den in diesem Ordner gespeicherten Daten können auch Prozesse außerhalb von Docker arbeiten. So die Montage von tmpfs und die Technologie des Bind-Mounts aus.

Die Montage von tmpfs und Bind-Mount
Die Nachteile der Verwendung der Bind-Mount-Technologie liegen darin, dass ihre Nutzung die Sicherung von Daten, die Migration von Daten und die gemeinsame Nutzung von Daten zwischen mehreren Containern komplizierter macht. Es ist viel besser, Docker-Volumes für die dauerhafte Speicherung von Daten zu verwenden.
Docker-Volumes
Ein Volume ist ein Dateisystem, das sich auf der Host-Maschine außerhalb der Container befindet. Die Erstellung und Verwaltung von Volumes erfolgt durch Docker. Hier sind die Hauptmerkmale von Docker-Volumes:
- Sie sind ein Mittel zur dauerhaften Speicherung von Informationen.
- Sie sind unabhängig und getrennt von Containern.
- Sie können von verschiedenen Containern gemeinsam genutzt werden.
- Sie ermöglichen eine effektive Organisation von Lese- und Schreibvorgängen.
- Volumes können auf Ressourcen eines entfernten Cloud-Anbieters platziert werden.
- Sie können verschlüsselt werden.
- Sie können benannt werden.
- Ein Container kann ein vorzeitiges Befüllen eines Volumes mit Daten 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 den Mitteln von Docker oder über API-Anfragen erstellt werden.
Hier ist eine Anweisung in Dockerfile, die es ermöglicht, ein Volume beim Start des Containers zu erstellen.
VOLUME /my_volumeDurch die Verwendung einer solchen Anweisung erstellt Docker nach dem Erstellen des Containers ein Volume, das die bereits vorhandenen Daten am angegebenen Ort enthält. Beachten Sie, dass die Erstellung eines Volumes mit Dockerfile Sie nicht von der Notwendigkeit befreit, den Mount-Punkt des Volumes anzugeben.
Volumes können auch im Dockerfile 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 aus der Befehlszeile
▍Ein Volume erstellen
Ein eigenständiges Volume kann mit dem folgenden Befehl erstellt werden:
docker volume create —-name my_volume▍Informationen zu Volumes abfragen
Um die Liste der Docker-Volumes anzuzeigen, verwenden Sie den folgenden Befehl:
docker volume lsEinen bestimmten Volume können Sie so untersuchen:
docker volume inspect my_volume▍Volume löschen
Ein Volume kann so gelöscht werden:
docker volume rm my_volumeUm alle Volumes zu entfernen, die nicht von Containern verwendet werden, können Sie den folgenden Befehl verwenden:
docker volume pruneVor dem Löschen von Volumes wird Docker um Ihre Bestätigung für diese Operation bitten.
Wenn das Volume mit einem Container verbunden ist, kann dieses Volume nicht gelöscht werden, solange der entsprechende Container nicht entfernt wurde. Selbst wenn der Container entfernt wurde, versteht Docker dies nicht immer. Wenn dies der Fall ist, können Sie den folgenden Befehl verwenden:
docker system pruneEr dient zur Bereinigung von Docker-Ressourcen. Nach Ausführung dieses Befehls sollten Sie die Möglichkeit haben, Volumes zu entfernen, deren Status zuvor falsch bestimmt wurde.
Die Flags —mount und —volume
Wenn Sie mit Volumes arbeiten, müssen Sie oft beim Aufruf von Befehlen docker, Flags verwenden. Zum Beispiel, um während der Erstellung eines Containers ein Volume zu erstellen, können Sie diese Konstruktion verwenden:
docker container run --mount source=my_volume, target=\/container\/path\/for\/volume my_image In alten Zeiten (vor 2017) war das Flag --volumesehr beliebt. Ursprünglich wurde dieses Flag (es kann auch in verkürzter Form verwendet werden, dann sieht es aus wie -v) für eigenständige Container verwendet, während das Flag --mount in der Docker Swarm-Umgebung verwendet wurde. Aber seit Docker 17.06 kann das Flag --mount in allen Szenarien verwendet werden.
Es ist zu beachten, dass bei der Verwendung des Flags --mount der Umfang der zusätzlichen Daten, die in den Befehl eingegeben werden müssen, größer wird, aber aus mehreren Gründen ist es besser, genau dieses Flag zu verwenden, und nicht --volume. Der Schalter --mount — es ist der einzige Mechanismus, der die Zusammenarbeit mit Diensten oder das Angeben von Volumetreiberparametern ermöglicht. Darüber hinaus ist die Arbeit mit diesem Flag einfacher.
In den bestehenden Beispielen von Befehlen zur Arbeit mit Daten in Docker können Sie viele Beispiele für die Verwendung des Flags -vsehen. Wenn Sie versuchen, diese Befehle für sich anzupassen, beachten Sie, dass die Flags --mount und --volume verschiedene Parameterformate verwenden. Das bedeutet, dass Sie nicht einfach -v auf --mount ersetzen können, um einen funktionierenden Befehl zu erhalten.
Der Hauptunterschied zwischen --mount und --volume liegt darin, dass bei der Verwendung des Flags --volume alle Parameter zusammen in ein Feld gesammelt werden, während bei der Verwendung --mount Parameter werden getrennt.
Bei der Arbeit mit --mount Parameter werden als Schlüssel-Wert-Paare dargestellt, das heißt, es sieht so 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 über Volumes, das heißt, wir interessieren uns für den WertVolume.source— Quelle der Montage. Bei benannten Volumes ist dies der Name des Volumes. Bei unbenannten Volumes wird dieser Schlüssel nicht angegeben. Er kann aufsrc.Ziel— den Pfad, an den die Datei oder der Ordner im Container gemountet wird. Dieser Schlüssel kann aufdstodertarget.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 mehreren Parametern:
docker run --mount type=volume,source=volume_name,destination=\/path\/in\/container,readonly my_imageErgebnisse
Hier sind nützliche Befehle, die Sie bei der Arbeit mit Docker-Volumes verwenden können:
docker volume createdocker volume lsdocker volume inspectdocker volume rmdocker volume prune
Hier ist eine Liste häufig verwendeter Parameter für --mount, anwendbar im Befehlstyp 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 jemand, der Docker lernt, als nächstes gehen kann. ein großartiger Artikel über Docker. ein Buch über Docker (wenn Sie dieses Buch kaufen, versuchen Sie, die neueste Ausgabe zu bekommen). ein weiteres Buch, das für diejenigen geeignet ist, die denken, dass praktische Anwendung der beste Weg ist, Technologien zu erlernen.
Liebe Leser! Welche Materialien über Docker würden Sie Anfängern empfehlen?
Quelle: habr.com
