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

So greifen Sie auf Dateien außerhalb eines Docker-Containers zu

Wenn Container isoliert sind, wie können sie dann mit dem Hostcomputer kommunizieren, vielleicht um Daten zu speichern? Denn wenn wir einen Container aus einem Image erstellen, gehen alle generierten Daten verloren, wenn der Container entfernt wird.

Also brauchen wir eine Möglichkeit, dauerhaft zu speichern.

Wir können dies mit Bind Mounts tun und Volumen .

Es gibt keinen großen Unterschied zwischen den beiden, außer dass Bind Mounts auf jeden Ordner auf dem Host-Computer zeigen können und nicht direkt von Docker verwaltet werden.

Beginnen wir mit ihnen. Ein klassisches Beispiel sind Protokolle. Angenommen, Ihre App erstellt eine Protokolldatei im Container unter /usr/src/app/logs . Sie können dies mit -v einem Ordner auf dem Hostcomputer zuordnen (dasselbe wie --volume )-Flag, wenn Sie den Container mit docker run ausführen , etwa so:-v ~/logs:/usr/src/app/logs

Dadurch wird dieser Ordner dem Unterordner logs im Home-Verzeichnis des Benutzers zugeordnet.

Knoten:der -m oder --mount flag funktioniert ganz ähnlich

Dies ist das Flag, das mit examplenode verwendet wird Bild, das wir zuvor erstellt haben:

docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode

Jetzt können wir also unsere Node-App ausführen, und alle Protokolle werden auf dem Host-Computer gespeichert und nicht im Docker-Container.

Beachten Sie, dass der examplenode app generiert kein Protokoll in /usr/src/app/logs , es ist nur ein Beispiel und Sie müssten diese Anmeldung zuerst einrichten.

Die Details zum Volume werden aufgelistet, wenn Sie docker inspect ausführen auf dem Containernamen unter „Mounts“:

"Mounts": [
    {
        "Type": "bind",
        "Source": "/Users/flavio/logs",
        "Destination": "/usr/src/app/logs",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

Können Sie "Type": "bind" sehen ? Das bedeutet, dass wir ein bind mount erstellt haben .

Lassen Sie uns nun über Volumes sprechen .

Der Unterschied zwischen Bind Mounts und Volumes besteht darin, dass Docker beim Erstellen von Volumes die Daten in einem von ihm verwalteten Ordner speichert, was bedeutet, dass es sich um Dateiberechtigungen und Eigentum kümmert und Ihnen die Tools zum Verwalten dieser Volumes zur Verfügung stellt. Während Bind-Mounts auf Dateisystempfaden basieren und Docker die Tools um sie herum nicht bereitstellen kann.

Mit Docker können Sie beispielsweise alle nicht verwendeten Volumes entfernen, indem Sie docker volume prune ausführen oder docker system prune --volumes .

Um ein Volume zu erstellen, müssen wir zuerst docker volume create ausführen :

docker volume create logs

Jetzt können Sie docker volume ls verwenden und docker volume inspect um weitere Daten über die Systemvolumes zu erhalten:

Führen Sie nun docker run aus mit der Option -v logs:/usr/src/app/logs (geben Sie den Volume-Namen anstelle eines Ordners an)

docker run -d -p 80:3000 -v logs:/usr/src/app/logs --name node-app examplenode

Jetzt wird docker inspect ausgeführt auf dem Bild zeigt das gemountete Volume:

"Mounts": [
    {
        "Type": "volume",
        "Name": "logs",
        "Source": "/var/lib/docker/volumes/logs/_data",
        "Destination": "/usr/src/app/logs",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],

Sehen? Jetzt werden die Protokolle in /var/lib/docker/volumes/logs/_data gespeichert Ordner.

Volumes sind von entscheidender Bedeutung, wenn es beispielsweise an der Zeit ist, einen Container in einem Cloud-Dienst bereitzustellen.

Sie können ein Volume entfernen, auf dem docker volume rm <name> ausgeführt wird .


Docker
  1. Wie führe ich ein Programm in einem Docker-Container aus?

  2. So führen Sie MySQL in einem Docker-Container aus

  3. Wie man SSH in einen Docker-Container einfügt

  4. So installieren Sie Vim in einem Docker-Container

  5. So listen Sie Docker-Container auf

So führen Sie Grafana in einem Docker-Container aus

So fügen Sie einem vorhandenen Docker-Container ein Volume hinzu

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

So richten Sie einen Apache Docker-Container ein

So kopieren Sie Dateien zwischen Host und Docker-Container

So führen Sie Docker-Container aus