GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

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

Docker verwendet zwei Arten von Formaten, um laufende Prozesse darzustellen – Bilder und Container, und beide speichern Daten auf dem Laufwerk Ihres Computers. Wir werden über die Befehle sprechen, die Docker für den Umgang mit Daten bereitstellt, und wie Sie sie verwenden können, um auf Image- und Containerdateien zuzugreifen.

Der Unterschied zwischen Bildern und Containern

Images sind das, was Sie erstellen, wenn Sie docker build ausführen; Sie werden in einer Containerregistrierung 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 das 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 haben Sie mehrere Container, die parallel von demselben Image ausgeführt werden. Jeder Container hat sein eigenes Dateisystem, das optional mit „Volume Mounts“ erstellt wird, die Daten vom Host an den Container binden.

Arbeiten mit Docker-Image-Speicher

Bilder speichern den gesamten Inhalt des Bildes auf Ihrem Laufwerk. Jedes Mal, wenn Sie ein Bild aus dem Internet ziehen, 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 folgenden Orten gespeichert:

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

Das Anfassen dieser Daten ist jedoch wahrscheinlich eine schlechte Idee . Der Speicher von Docker ist kompliziert und variiert tatsächlich stark, je nachdem, welcher Speichertreiber verwendet wird. Linux verwendet jetzt standardmäßig overlay2 auf den meisten Distributionen, die für die meisten Endbenutzer nicht einmal zugänglich ist. Hiermit herumzuspielen kann zu Datenverlust führen.

Stattdessen stellt Docker verwaltete Befehle zum Umgang mit Images bereit. Sie können alle Versionen heruntergeladener Bilder mit einem einfachen Befehl anzeigen:

docker image ls

Glücklicherweise ist es nicht so schlimm, wie es aussieht, da Docker-Images Versionen inkrementell speichern. Das bedeutet, dass beim Herunterladen einer neuen Version nur die geänderten Teile ersetzt werden. Wenn Sie häufig dasselbe Bild immer und 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 Bilder gelöscht, die keine Referenzen haben, d. h. nicht getaggt sind oder von keinem Container referenziert werden.

docker image prune

Um alle alten Images zu löschen, die nicht von vorhandenen Containern verwendet werden, führen Sie es mit -a aus Flagge:

docker image prune -a

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

  • inspect :zeigt Informationen über eine Containerversion an.
  • save & load :speichert und lädt Bilder in ein tar archivieren.
  • rm :entfernt ein Bild direkt.
  • pull/push :Aktualisierungen von einer Remote-Registrierung.
  • history :stellt ein Änderungsprotokoll bereit.

Arbeiten mit Docker-Containerspeicher

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

docker inspect containerID

Container speichern Daten auf zwei Arten. Das erste ist das Basisdateisystem, das aus dem Image kopiert wird und für jeden Container eindeutig ist. Docker verwendet ein „unteres Verzeichnis“ und ein „oberes Verzeichnis“, bei denen es sich um separate Ebenen handelt, die zu einem hybriden Dateisystem zusammengeführt werden. Das untere Verzeichnis speichert die Basisbilddaten, und das obere Verzeichnis speichert alles, was zur Laufzeit geändert wurde, z. B. Protokolldateien. In beiden Fällen hängt deren Speicherung von dem Dateisystemtreiber ab, für dessen Verwendung Docker konfiguriert ist.

Dann gibt es Reittiere , die Verzeichnisse vom Host an den Container binden, normalerweise automatisch mit einer Docker-Funktion namens Volumes. verwaltet Diese werden normalerweise gespeichert und sind für Endbenutzer zugänglich. Wenn Sie Arbeiten ausführen, bei denen Sie Daten in laufenden Containern ändern müssen, sollten Sie wahrscheinlich ein Volume ändern oder eine Bindung einhängen.

Auf Datenträger 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 in Volumes gespeicherte Daten ändern möchten, können Sie dies auch tun. Sie werden in einem Standardformat gespeichert, auf das von Linux aus zugegriffen werden kann:

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

Sie können die Volume-ID und Informationen mit docker volume inspect abrufen .

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

docker volume prune

docker volume rm volumeID

Ändern des Dateisystems eines Docker-Containers

Wenn Sie das Dateisystem des Containers ändern möchten, ähnlich wie bei Bildern, ist dies 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 anzuhalten, ist es am besten, einfach eine Bash-Shell im Container zu öffnen und sie über Docker zu ändern. Dies ist sehr einfach – führen Sie docker exec aus auf dem Container 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.

VERBUNDEN: SSH in einen Docker-Container


Docker
  1. Wo werden Übersetzungsdateien gespeichert?

  2. So halten Sie Docker-Container am Laufen, wenn der Daemon stoppt

  3. Einführung in Docker-Images

  4. So überprüfen Sie den Status und den von Bildern und Containern belegten Speicherplatz

  5. Docker:Sind Docker-Links veraltet?

So analysieren und erkunden Sie den Inhalt von Docker-Images

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

So aktualisieren Sie Docker-Images auf die neueste Version

Arbeiten mit Docker-Images über die Befehlszeile

Arbeiten mit Docker-Containern über die Befehlszeile

Einsteigerleitfaden für die Docker-Welt