Speicherkonzepte für Container

Abgeschlossen

Windows-Container verwenden standardmäßig flüchtigen Speicher (Scratch Space) für alle Eingaben und Ausgaben. Jeder Container verfügt über einen eigenen Scratch Space, in dem alle Dateierstellungs- und Dateischreibvorgänge erfasst werden, sodass sie den Host nicht verlassen. Wenn eine Containerinstanz gelöscht wird, werden alle Änderungen, die im sicheren Speicherbereich aufgetreten sind, verworfen. Wenn eine neue Containerinstanz gestartet wird, wird ein neuer sicherer Speicherbereich für die Instanz bereitgestellt.

Layerspeicher

Alle Container werden aus Containerimages erstellt. Ein Containerimage ist ein Bündel von Dateien, die in einem Stapel von Ebenen (als Layerspeicher bezeichnet) organisiert sind, der sich auf Ihrem lokalen Computer oder in einer Remotecontainerregistrierung befindet. Das Containerimage besteht aus den Betriebssystemdateien des Benutzermodus, die für Folgendes erforderlich sind:

  • Unterstützen Ihrer App
  • Eine beliebige Anwendungslaufzeit
  • Abhängigkeiten Ihrer App
  • Alle anderen sonstigen Konfigurationsdateien, die Ihre App ordnungsgemäß ausführen muss

In einer Windows-Umgebung werden Layer mithilfe von CimFS gespeichert und werden auf NTFS (New Technology File System), ReFS oder RefDisks zur Layerspeicherung unterstützt. Sie können ändern, wo die Dateien mithilfe der docker-rootKonfiguration (oder gleichwertig mit Container) gespeichert werden, aber Sie sollten keine Dateien in den Layerverzeichnissen ändern. Sie werden sorgfältig mithilfe von Docker (oder gleichwertigen Befehlen) verwaltet.

Dauerhafte Speicherung

Möglicherweise gibt es Fälle, in denen Ihre App Daten in einem Container speichern muss. Oder Sie möchten Dateien in einem Container speichern, die nicht zur Containerbuildzeit enthalten waren. Sie können Ihren Windows-Containern auf verschiedene Arten dauerhaften Speicher gewähren:

  • Binden von Bereitstellungen
  • Benannte Volumes

Binden von Bereitstellungen

Bind Mounts erlauben es einem Container, ein Verzeichnis den Host freizugeben, indem ein Verzeichnis auf dem Host einem Verzeichnis innerhalb des Containers zugeordnet wird. Bind Mounts sind nützlich, wenn Sie einen Ort zum Speichern von Dateien auf dem lokalen Computer benötigen, der verfügbar ist, wenn Sie einen Container neu starten und ihren Scratch Space verlieren. Oder wenn Sie eine Datei für mehrere Container freigeben möchten.

Wenn ein Container auf mehreren Computern mit Zugriff auf die gleichen Dateien ausgeführt werden soll, sollte stattdessen ein benanntes Volume oder eine SMB-Bereitstellung verwendet werden. Es ist wichtig, dass Sie keine vertraulichen Verzeichnisse binden, z. B. als C:\ an einen nicht vertrauenswürdigen Container. Dadurch könnten diese Dateien auf dem Host geändert werden, auf die normalerweise kein Zugriff gewährleistet ist und es könnte daraus eine Sicherheitsverletzung resultieren.

Das folgende Beispiel zeigt den Docker-Befehl zum Erstellen eines Bind Mounts an einen Ordner C:\ContainerData auf dem Host an C:\data den Container mit Standardzugriff mit Lese-/Schreibzugriff:

docker run -v c:\ContainerData:c:\data

Benannte Volumes

Mit benannten Volumes können Sie anhand des Namens ein Volume erstellen, dieses einem Container zuweisen und es später mit dem gleichen Namen wiederverwenden. Volumes bieten Ihnen die Möglichkeit, einen speziellen Speicherort auf dem Host zu erstellen und zu verwalten, der zum Speichern von Containerdaten dediziert ist. Sie müssen nicht den tatsächlichen Pfad verfolgen, in dem es erstellt wurde, nur den Namen.

Das Docker-Modul unter Windows verfügt über ein integriertes benannte Volume-Plug-In, das Volumes auf dem lokalen Computer erstellen kann. Wenn Sie benannte Volumes auf mehreren Computern verwenden möchten, ist ein weiteres Plug-In erforderlich.

Das folgende Beispiel zeigt die Docker-Befehle zum Erstellen und Starten eines Containers mit dem Namen „mycontainer“, der dem lokalen Volume c:data zugeordnet ist:

docker volume create myvolume docker run -v myvolume:c:\data microsoft/windowsservercore

Bind Mounts hängen zwar von der Verzeichnisstruktur und dem Betriebssystem (OS) des Hostcomputers ab, Docker verwaltet Volumes jedoch vollständig. Volumes haben mehrere Vorteile gegenüber Bind Mounts:

  • Volumes können einfacher gesichert oder migriert werden, als Bind Mounts.
  • Sie können Volumes mithilfe von Docker CLI-Befehlen oder der Docker-API verwalten.
  • Volumes funktionieren sowohl für Linux- als auch für Windows-Container.
  • Volumes können sicherer zwischen mehreren Containern gemeinsam genutzt werden.
  • Mit Volumetreibern können Sie Volumes auf Remotehosts oder Cloudanbietern speichern, die Inhalte von Volumes verschlüsseln oder andere Funktionen hinzufügen.
  • Neue Volumes können ihre Inhalte durch einen Container vorab aufgefüllt haben.

Darüber hinaus sind Volumes häufig eine bessere Wahl als das Speichern von Daten in der beschreibbaren Ebene eines Containers (Scratch Space). Ein Volume erhöht nicht die Größe der Container, die sie verwenden (genau wie bind mount), und der Inhalt des Volumes ist außerhalb des Lebenszyklus eines bestimmten Containers vorhanden.