Wo werden Docker-Images und -Container auf dem Host gespeichert?

0
1104

Docker verwendet zwei Arten von Formaten, um laufende Prozesse darzustellen: und Container, und beide speichern Daten auf dem Laufwerk Ihres Computers. Wir sprechen über die Befehle, die Docker für den Umgang mit Daten bereitstellt, und wie Sie damit auf Image- und Container-Dateien zugreifen können.

Der Unterschied zwischen Bilder und Container

Images sind das, was Sie erstellen, wenn Sie Docker-Build ausführen. Sie werden in einer Container-Registry wie dem Docker Hub gespeichert und enthalten alle Dateien und den Code zum Ausführen einer App. Sie können sie sich wie ISO-Dateien für ein Betriebssystem einer virtuellen Maschine vorstellen.

Container werden aus Images erstellt und sind wie die eigentliche virtuelle Maschine, auf der die Anwendung ausgeführt wird. Möglicherweise laufen mehrere Container parallel von demselben Image. Jeder Container hat sein eigenes Dateisystem, das optional mit “volume mounts” die Daten vom Host an den Container binden.

Arbeiten mit Docker Image Storage

Images speichern den gesamten Inhalt des Images auf Ihrem Laufwerk. Jedes Mal, wenn Sie ein Bild aus dem Internet abrufen, wird es heruntergeladen und gespeichert, normalerweise für immer. Bilder können sehr groß sein, sodass sich dies im Laufe der Zeit summieren kann, insbesondere bei Laptops mit begrenztem Speicherplatz.

Wenn Sie direkt auf die Bilddaten zugreifen möchten, werden diese normalerweise an den folgenden Orten gespeichert:

  • Linux: /var/lib/docker/
  • Windows: C:ProgramDataDockerDesktop
  • macOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

Werbung

Das Anfassen dieser Daten ist jedoch wahrscheinlich eine schlechte Idee. Der Speicher von Docker ist kompliziert und variiert je nach verwendetem Speichertreiber stark. Linux ist jetzt in den meisten Distributionen standardmäßig auf Overlay2, was für die meisten Endnutzer nicht einmal zugänglich ist. Dies kann zu Datenverlust führen.

Stattdessen bietet Docker verwaltete Befehle zum Verarbeiten von Images. Sie können alle Versionen heruntergeladener Bilder mit einem einfachen Befehl anzeigen:

docker image ls

Zum Glück ist es nicht so schlimm, wie es aussieht, da Docker-Images Versionen inkrementell speichern. Das heißt, wenn Sie eine neue Version herunterladen, werden nur die Teile ersetzt, die geändert wurden. Wenn Sie das gleiche Bild häufig immer wieder verwenden, werden Sie wahrscheinlich nicht zu viele Speicherkosten verursachen.

Wenn Sie jedoch viele verschiedene Bilder verwenden, haben Sie möglicherweise viele Bilder gespeichert, die nicht einmal mehr verwendet werden. Um diese zu bereinigen, bietet Docker einen integrierten Befehl zum Ausführen der Garbage Collection. Dadurch werden alle Images entfernt, die keine Referenzen haben, d. h. nicht mit Tags versehen oder von keinem Container referenziert werden.

docker image prune

Um alle alten Images zu bereinigen, die nicht von vorhandenen Containern verwendet werden, führen Sie es mit dem Flag -a aus:< /p> docker image prune -a

Das deckt den Hauptanwendungsfall ab, aber es gibt noch ein paar nützlichere Befehle:

  • inspect: Zeigt Informationen zu einer Containerversion an.
  • speichern & load: speichert und lädt Bilder in ein tar-Archiv.
  • rm: entfernt ein Bild direkt.
  • pull/push: Updates aus einer Remote-Registry.
  • history : stellt ein Änderungsprotokoll bereit.

Arbeiten mit Docker-Container-Speicher

Sie können alle Informationen zu einem Container mit Docker anzeigen inspect, das die Dateisystemtreiber und -daten sowie alle vorhandenen Mounts und Volumes anzeigt.

docker inspect containerID

Werbung

Container speichern Daten auf zwei Arten. Das erste ist das Basisdateisystem, das aus dem Image kopiert wird und für jeden Container einzigartig ist. Docker verwendet ein “unteres Verzeichnis” und “oberes Verzeichnis,” das sind separate Ebenen, die zu einem hybriden Dateisystem zusammengeführt werden. Das untere Verzeichnis speichert die Basis-Image-Daten und das obere Verzeichnis speichert alles, was zur Laufzeit geändert wurde, z. B. Protokolldateien. In beiden Fällen hängt die Speicherung davon vom Dateisystemtreiber ab, für den Docker konfiguriert ist.

Dann gibt es Mounts, die Verzeichnisse vom Host an den Container binden, die normalerweise automatisch mit einer Docker-Funktion namens . verwaltet werden Bände. Diese werden normal gespeichert und sind für Endbenutzer zugänglich. Wenn Sie eine Arbeit ausführen, bei der Sie Daten in laufenden Containern ändern müssen, sollten Sie wahrscheinlich ein Volume ändern oder ein Binden mounten.

Auf Volumes zugreifen

Auf Bind-Mounts kann direkt zugegriffen werden und sie sind eine gute Wahl, wenn Sie Konfigurationen speichern möchten, die für viele Container verwendet werden, oder zugängliche Daten speichern möchten, die über Container-Neustarts hinweg bestehen bleiben.

Wenn Sie Änderungen vornehmen möchten Daten in Volumes gespeichert, können Sie dies auch tun. Sie werden in einem Standardformat gespeichert, auf das unter Linux zugegriffen werden kann:

/var/lib/docker/volumes/volumeID/_data

Sie können die Volume-ID und Informationen mit Docker Volume Inspect abrufen.

Werbung

Ähnlich wie Bilder können auch Bände veralten. Sie können sie leicht entfernen, aber das Sichern und Übertragen ist ein schwieriger Prozess.

docker volume prune docker volume rm volumeID

Ändern des Dateisystems eines Docker-Containers

Wenn Sie möchten Um das Dateisystem des Containers zu ändern, ist dies ähnlich wie bei Bildern eine schlechte Idee. In den meisten Fällen sollten Sie eine neue Version des Containers mit den aktualisierten Änderungen erstellen und ein Update bereitstellen.

Wenn Sie jedoch einige schnelle Änderungen vornehmen möchten, ohne den Container zu stoppen, öffnen Sie am besten einfach eine Bash-Shell im Container und ändern Sie sie über Docker. Dies ist sehr einfach —führen Sie docker exec auf dem Container aus und übergeben Sie “bash” als Befehl:

docker exec -it container bash

Von hier aus können Sie normale Linux-Befehle verwenden. Wenn Sie dies aus der Ferne tun möchten, können Sie einen SSH-Server in Ihrem Container installieren und Port 22 an einen anderen Port auf dem Host binden.

VERWANDTE: Anleitung SSH in einen Docker-Container