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

Wie man ein Host-Verzeichnis in einen Docker-Container einbindet

Docker bietet Tools zum Überbrücken der Dateisysteme von Containern und des Hostbetriebssystems, auf dem der Container ausgeführt wird, z. B. Bind-Mounts und -Volumes. Diese können sowohl in Entwicklungs- als auch in Produktionsumgebungen sehr nützlich sein.

Warum Mount vom Host?

Im Allgemeinen möchten Sie mit Docker, dass Images unabhängig vom Hostsystem ausgeführt werden. Wenn Sie beispielsweise den Code oder die Konfigurationsdateien einer App aktualisieren möchten, möchten Sie wahrscheinlich eine neue Version des Containers erstellen und erneut bereitstellen. Auf diese Weise können Sie Bilder schnell skalieren und verschieben, ohne sich Gedanken über die Hardware machen zu müssen, auf der sie ausgeführt werden.

In einer Entwicklungsumgebung kann es jedoch sehr nützlich sein, ein Verzeichnis direkt zu mounten, um das Hot-Reloading von Konfigurationen oder Code zu ermöglichen. Beispielsweise arbeiten Sie möglicherweise an einer JS-Datei oder einem PHP-Plugin, das Sie einfach per Drag-and-Drop in den Container ziehen können. Oder Sie möchten vielleicht ein ganzes NGINX-Konfigurationsverzeichnis mounten, um auf Ihrer Website zu arbeiten. Unabhängig von Ihrem Anwendungsfall ist das Mounten von Dateien keine schlechte Lösung.

Es ist auch in der Produktion nützlich, wenn Sie Hostdienste haben, die von Dateien in Containern abhängen. Beispielsweise haben Sie möglicherweise einen Protokollerfassungs- und -aggregationsdienst, der es vorziehen würde, wenn sich die Protokolldateien des Containers in einem Verzeichnis befinden, auf das vom Host aus zugegriffen werden kann. Während es wahrscheinlich einige reine In-Docker-Lösungen für Ihre Probleme gibt, ist es manchmal einfacher, einfach ein Volume zu mounten.

macOS-Kompatibilität

Hinweis:Da Mounts über die Docker-API abgewickelt werden, funktionieren sie unabhängig vom Host-Betriebssystem. macOS verfügt jedoch über zusätzliche Schutzmaßnahmen, und Mounts außerhalb einiger Hostverzeichnisse können zur Laufzeit mit „Mounts verweigert“ fehlschlagen. Dazu gehört /Users , das die meisten Vorgänge abdeckt, aber bei Bedarf können Sie dies in den Docker-Einstellungen unter „Einstellungen“> „Ressourcen“> „Dateifreigabe“ beheben, indem Sie das Zielverzeichnis zur Liste hinzufügen.

Mounten eines Host-Verzeichnisses

Das Erstellen eines Bind-Mounts ist ziemlich einfach. Fügen Sie es mit --mount type=bind hinzu Flag beim Start und gibt ein Quell- und Zielverzeichnis an, in das gemountet werden soll.

docker run -d 
-it 
--name container 
--mount type=bind,source=/nginxconfig,target=/etc/nginx 
nginx:latest

Bind-Mounts sind die einfachsten, aber Docker bietet die Volume-API, um diese Art von Mounts etwas besser zu verwalten. Die gespeicherten Daten werden von Docker verwaltet und das Volume-Verzeichnis wird automatisch im Docker-Verzeichnis erstellt. Dies ist möglicherweise nicht das, was Sie möchten, wenn Sie ein vorhandenes Verzeichnis im Auge haben, aber diese Methode ist besser, da sie nicht von der Dateistruktur des Host-Betriebssystems abhängt.

docker volume create nginx-config

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

Sie können auch Docker Compose verwenden, um Volumes zu definieren:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx/
volumes:
  nginx-config:

Diese werden in einem für Linux zugänglichen Standardformat gespeichert:

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

Unter macOS müssen Sie sich jedoch mit der virtuellen Docker-Maschine verbinden, um Volumes anzeigen zu können.

VERBINDUNG: Was sind Docker-Volumes und wie verwenden Sie sie?

Einhängen einzelner Dateien

Das Mounten ganzer Verzeichnisse funktioniert gut, wenn Sie viele Konfigurations-/Codedateien bearbeiten möchten, die auf dem Host gespeichert sind. Manchmal möchten Sie jedoch vielleicht nur eine einzelne Datei zum Bearbeiten mounten, ohne die anderen Dateien zu berühren.

Dazu können Sie den Container mit einem Bind-Mount ausführen, der einzelne Dateien unterstützt, wenn Sie den Pfad angeben:

docker run -it 
--mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg 
nginx sh

Wenn Sie viele Dateien auf diese Weise bereitstellen müssen, können Sie sie alle im selben Hostverzeichnis ablegen und dieses Verzeichnis an einem anderen Ort im Container bereitstellen. Sie können dann symbolische Links innerhalb des Containers verwenden, um Dateien im bereitgestellten Verzeichnis mit dem richtigen Speicherort zu verknüpfen.


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

  2. So mounten oder symbolisieren Sie eine einzelne Datei in einem Docker-Container

  3. So weisen Sie einem Docker-Container eine statische IP zu

  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ühren Sie SSH in Docker-Container ein [Schritt für Schritt]

So richten Sie einen Apache Docker-Container ein

So kopieren Sie Dateien zwischen Host und Docker-Container

So führen Sie Docker-Container aus

So führen Sie SSH in einen Docker-Container ein