In der heutigen Ausgabe der Docker-Reihe werden wir über das Arbeiten mit Daten sprechen. Insbesondere Docker-Volumes. In diesen Materialien haben wir die Softwaremechanismen von Docker ständig mit verschiedenen essbaren Analogien verglichen. Wir werden hier nicht von dieser Tradition abweichen. Docker-Daten sollten gewürzt sein. Es gibt viele Arten von Gewürzen auf der Welt, und in Docker gibt es viele Möglichkeiten, mit Daten zu arbeiten.
→
Teil 1: die Grundlagen→
Teil 2: Begriffe und Konzepte→
Teil 3: Dockerfile-Dateien→
Teil 4: Verkleinern von Bildern und Beschleunigen ihrer Montage→
Teil 5: Teams→
Teil 6: Arbeiten mit DatenBitte beachten Sie, dass dieses Material mit der Docker Engine Version 18.09.1 und der API Version
1.39 erstellt wurde .
Docker-Daten können entweder vorübergehend oder dauerhaft gespeichert werden. Beginnen wir mit den Zeitdaten.
Temporäre Datenspeicherung
Es gibt zwei Möglichkeiten, die Arbeit mit temporären Daten in Docker-Containern zu organisieren.
Standardmäßig werden Dateien, die von einer Anwendung erstellt wurden, die in einem Container ausgeführt wird, in einer aufzeichnungsfähigen Containerschicht gespeichert. Damit dieser Mechanismus funktioniert, müssen Sie nichts speziell konfigurieren. Es stellt sich billig und wütend heraus. Eine Anwendung muss nur Daten speichern und weiterhin ihre eigenen Aufgaben ausführen. Wenn der Container jedoch nicht mehr existiert, verschwinden die auf so einfache Weise gespeicherten Daten.
Zum Speichern temporärer Dateien in Docker können Sie eine andere Lösung verwenden, die für Fälle geeignet ist, in denen ein höheres Leistungsniveau erforderlich ist als mit dem Standardmechanismus für die temporäre Datenspeicherung. Wenn Ihre Daten nicht länger gespeichert werden müssen als der Container vorhanden ist, können Sie tmpfs mit dem Container verbinden, einer temporären Speicherung von Informationen, die den Host-RAM verwenden. Dies beschleunigt das Schreiben und Lesen von Daten.
Es kommt häufig vor, dass Daten gespeichert werden müssen, auch wenn der Container nicht mehr existiert. Dazu benötigen wir nützliche Mechanismen für die permanente Datenspeicherung.
Permanente Datenspeicherung
Es gibt zwei Möglichkeiten, die Lebensdauer von Daten zu verlängern als die Lebensdauer von Containern. Eine Möglichkeit ist die Verwendung der Bind-Mount-Technologie. Mit diesem Ansatz können Sie beispielsweise einen wirklich vorhandenen Ordner in den Container einbinden. Prozesse außerhalb von Docker können mit Daten arbeiten, die in einem solchen Ordner gespeichert sind. So
sieht die tmpfs mount and bind mount-Technologie
aus .
Mounten Sie tmpfs und binden Sie mountDie Verwendung der Bind-Mount-Technologie hat den Nachteil, dass ihre Verwendung das Sichern von Daten, das Migrieren von Daten und das Teilen von Daten über mehrere Container hinweg erschwert. Es ist viel besser, Docker-Volumes für die dauerhafte Datenspeicherung zu verwenden.
Tom Docker
Ein Volume ist ein Dateisystem, das sich auf einem Hostcomputer außerhalb von Containern befindet. Die Volume-Erstellung und -Verwaltung erfolgt durch Docker. Hier sind die grundlegenden Eigenschaften von Docker-Volumes:
- Sie stellen ein Mittel zur dauerhaften Speicherung von Informationen dar.
- Sie sind unabhängig und von Containern getrennt.
- Sie können von verschiedenen Containern gemeinsam genutzt werden.
- Mit ihnen können Sie das effektive Lesen und Schreiben von Daten organisieren.
- Volumes können auf dem Remote-Cloud-Anbieter gehostet werden.
- Sie können verschlüsselt werden.
- Sie können benannt werden.
- Der Container kann dafür sorgen, dass das Volume im Voraus mit Daten gefüllt wird.
- Sie sind bequem zum Testen.
Wie Sie sehen können, bieten Docker-Volumes großartige Funktionen. Lassen Sie uns darüber sprechen, wie man sie erstellt.
Volume-Erstellung
Volumes können mit Docker oder über API-Anforderungen erstellt werden.
Hier ist die Anweisung in der Docker-Datei, mit der Sie beim Starten des Containers ein Volume erstellen können.
VOLUME /my_volume
Wenn Sie eine ähnliche Docker-Anweisung verwenden, wird nach dem Erstellen des Containers ein Volume erstellt, das Daten enthält, die bereits am angegebenen Speicherort vorhanden sind. Beachten Sie, dass Sie beim Erstellen eines Volumes mit der Docker-Datei nicht die Notwendigkeit haben, einen Einhängepunkt für das Volume anzugeben.
Sie können Volumes auch in Dockerfile im JSON-Format erstellen.
Darüber hinaus können Volumes über die Befehlszeile erstellt werden, während der Container ausgeführt wird.
Arbeiten mit Volumes über die Befehlszeile
▍Erstellen Sie ein Volume
Mit dem folgenden Befehl können Sie ein unabhängiges Volume erstellen:
docker volume create —-name my_volume
▍Faltvolumeninformationen
Verwenden Sie den folgenden Befehl, um die Liste der Docker-Volumes anzuzeigen:
docker volume ls
Sie können ein bestimmtes Volumen wie folgt erkunden:
docker volume inspect my_volume
▍Entfernen Sie die Lautstärke
Sie können ein Volume wie folgt löschen:
docker volume rm my_volume
Um alle Volumes zu löschen, die nicht von Containern verwendet werden, können Sie auf den folgenden Befehl zurückgreifen:
docker volume prune
Vor dem Löschen von Volumes werden Sie von Docker um Bestätigung dieses Vorgangs gebeten.
Wenn das Volume einem Container zugeordnet ist, kann ein solches Volume erst gelöscht werden, wenn der entsprechende Container gelöscht wurde. In diesem Fall versteht Docker dies nicht immer, selbst wenn der Container entfernt wird. In diesem Fall können Sie den folgenden Befehl verwenden:
docker system prune
Es wurde entwickelt, um Docker-Ressourcen zu bereinigen. Nach dem Ausführen dieses Befehls sollten Sie in der Lage sein, Volumes zu löschen, deren Status zuvor falsch ermittelt wurde.
Flags --mount und --volume
Um mit Volumes zu arbeiten, müssen Sie beim Aufrufen des
docker
häufig Flags verwenden. Um beispielsweise während der Erstellung eines Containers ein Volume zu erstellen, können Sie die folgende Konstruktion verwenden:
docker container run --mount source=my_volume, target=/container/path/for/volume my_image
In der Antike (bis 2017) war die Flagge
--volume
. Ursprünglich wurde dieses Flag (es kann auch in abgekürzter Form verwendet werden, dann sieht es wie
-v
) für unabhängige Container verwendet, und das Flag
--mount
wurde in der Docker Swarm-Umgebung verwendet. Ab Docker
--mount
kann das Flag
--mount
jedoch in jedem Szenario verwendet werden.
Es ist zu beachten, dass bei Verwendung des
--mount
die Menge der zusätzlichen Daten zunimmt, die im Befehl angegeben werden müssen. Aus mehreren Gründen ist es jedoch besser, dieses Flag anstelle von
--volume
. Das Flag
--mount
ist der einzige Mechanismus, mit dem Sie mit Diensten arbeiten oder Volume-Treibereinstellungen festlegen können. Außerdem ist das Arbeiten mit diesem Flag einfacher.
In vorhandenen Beispielen für Befehle zum Arbeiten mit Daten in Docker finden Sie viele Beispiele für die Verwendung des Flags
-v
.
--mount
--volume
beim Anpassen dieser Befehle, dass die
--mount
und
--volume
unterschiedliche Parameterformate verwenden. Das heißt, Sie können
-v
nicht einfach durch
--mount
ersetzen und einen funktionierenden Befehl erhalten.
Der Hauptunterschied zwischen
--mount
und
--volume
besteht darin, dass bei Verwendung des
--volume
alle Parameter in einem Feld zusammengefasst werden und bei Verwendung von
--mount
Parameter getrennt werden.
Bei der Arbeit mit
--mount
Parameter als Schlüssel-Wert-Paare dargestellt,
--mount
es sieht aus wie
key=value
. Diese Paare werden durch Kommas getrennt. Hier sind die häufig verwendeten
--mount
Optionen:
type
- Mount-Typ. Der Wert für den entsprechenden Schlüssel kann bind , volume oder tmpfs sein . Wir sprechen hier von Volumen, das heißt - wir interessieren uns für den Wert von volume
.source
- mount source. Bei benannten Volumes ist dies der Name des Volumes. Für unbenannte Volumes ist dieser Schlüssel nicht angegeben. Es kann zu src
gekürzt werden.destination
- Der Pfad, unter dem die Datei oder der Ordner im Container bereitgestellt wird. Dieser Schlüssel kann auf dst
oder target
gekürzt werden.readonly
- stellt ein schreibgeschütztes Volume readonly
. Die Verwendung dieses Schlüssels ist optional, ihm wird kein Wert zugewiesen.
Hier ist ein Beispiel für die Verwendung von
--mount
mit vielen Optionen:
docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image
Zusammenfassung
Hier sind einige nützliche Befehle, die Sie beim Arbeiten mit Docker-Volumes verwenden können:
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune
Hier ist eine Liste häufig verwendeter Optionen für
--mount
, die auf einen Befehl wie
docker run --mount my_options my_image
:
type=volume
source=volume_name
destination=/path/in/container
readonly
Nachdem wir diese Docker-Reihe fertiggestellt haben, ist es an der Zeit, ein paar Worte darüber zu sagen, wo diejenigen, die Docker studieren, weitermachen können.
Hier ist ein großartiger Artikel über Docker.
Hier ist ein Buch über Docker (versuchen Sie beim Kauf dieses Buches, die neueste Ausgabe zu erhalten).
Hier ist ein weiteres Buch, das für diejenigen geeignet ist, die glauben, dass Übung der beste Weg ist, Technologie zu lernen.
Liebe Leser! Welche Materialien über Docker würden Sie Anfängern zum Lernen empfehlen?
