2016-10-24 3 views
1

Ich verstehe Docker-Volumes und die Art, wie sie auf Verzeichnisse auf dem Host verweisen. Was ist mit dem Rest des Dateisystems in einem Container?Wie werden Nicht-Volumendaten für einen Docker-Container gespeichert?

Um es anders zu denken: Angenommen, Sie haben einen Server mit dem größten Teil des Speichers auf einem Remote-Laufwerk, dh Lese- und Schreibvorgänge dauern länger als gewöhnlich. Wenn Sie keine Volumes mounten, würde es irgendein/einige/meisten/alle des Container-Dateisystem im RAM behalten? Oder schreibt es eine Menge davon auf die Festplatte, was bedeutet, dass es in diesem Fall genauso langsam ist wie ein Volume?

+0

Vorgeschlagene Lektüre: Abschnitt ["Bilder, Container und Speichertreiber verstehen"] (https: //docs.docker.com/engine/userguide/storer/imagesandcontainers /) aus der Dokumentation. – helmbert

Antwort

3

Nicht-Volumendaten werden in einem Layer-Overlay-Dateisystem gespeichert (in den meisten Distributionen ist dies entweder ein AUFS oder DeviceMapper Dateisystem). Das Prinzip ist das gleiche in beiden Fällen (image source):

enter image description here

Wie bereits in den Kommentaren erwähnt, kann ich empfehlen den Abschnitt "Understand images, containers and storage drivers" von der offiziellen Dokumentation zu lesen. Diese Antwort ist nur eine kurze Zusammenfassung.

Jedes Docker-Image besteht aus mehreren Schichten von Dateisystemimages. Zum Beispiel könnte ein Apache + PHP-Bild bestehen aus (1) einem generischen Ubuntu-Basis-Layer, (2) einem zusätzlichen Layer mit installiertem Apache HTTP-Server und (3) einem weiteren Layer mit PHP-FPM und Konfigurationsdateien (nur ein Beispiel).

Wenn Sie einen neuen Container aus einem Bild starten, wird eine neue pro-Container-Ebene zu den vorhandenen Bildebenen hinzugefügt. Diese Ebene enthält alle Änderungen, die innerhalb des Containers selbst (in Nicht-Volume-Verzeichnisse) geschrieben werden.

In Bezug auf Ihre speziellen Fragen:

Wenn Sie alle Volumes nicht bestücken, würde es halten jede/some/die meisten/alle des Behälters Dateisystem im RAM?

Nein, es gibt nichts im RAM (neben den üblichen Dateisystem-Caches). Es befindet sich alles im Overlay-Dateisystem, das mithilfe von AUFS, DeviceMapper oder einem anderen Speichertreiber bereitgestellt wird.

Oder schreibt es eine Menge davon auf die Festplatte, was bedeutet, dass es in diesem Fall genauso langsam ist wie ein Volume?

Im Allgemeinen ist der Dateisystemzugriff in Volumes performanter als im Overlay-Dateisystem. Immerhin ist ein Volume (zumindest ein reguläres Host-basiertes Volume, das Volume-Treiber, die Netzwerkspeicher-Volumes hinzufügen, beiseite gelegt) einfach ein Bind-Mount an ein reguläres Verzeichnis im Host-Dateisystem, wobei das Layer-Dateisystem vollständig umgangen wird. Die Leistung von Volumina im Vergleich Dateisystem Schicht ist (neben anderen Themen) untersuchte in this paper:

AUF führt erheblichen Aufwand was nicht verwunderlich ist, da I/O wird durch mehrere Schichten gehen, [...] . Anwendungen, die Dateisystem- oder Festplattenintensiv sind, sollten AUFS mithilfe von Volumes umgehen. [...] Obwohl Container selbst fast keinen Overhead haben, ist Docker nicht ohne Performance-Probleme. Docker-Volumes haben eine deutlich bessere Leistung als die in AUFS gespeicherten Dateien.

Verwandte Themen