So geben Sie Daten zwischen dem Docker-Container und dem Host frei

Einführung

Im Allgemeinen sind Docker-Container kurzlebig und werden nur so lange ausgeführt, wie der im Container ausgegebene Befehl ausgeführt wird. Standardmäßig sind alle im Container erstellten Daten nur im Container und nur während der Ausführung des Containers verfügbar.

Docker-Volumes können zum Freigeben von Dateien zwischen einem Hostsystem und dem Docker-Container verwendet werden. Angenommen, Sie möchten das offizielle Docker Nginx-Image verwenden und eine permanente Kopie der Nginx-Protokolldateien für eine spätere Analyse aufbewahren. Standardmäßig wird das Docker-Image vonnginxim Verzeichnis/var/log/nginxdes Docker Nginx-Containers/var/log/nginxprotokolliert. Normalerweise ist es vom Host-Dateisystem aus nicht erreichbar.

In diesem Lernprogramm erfahren Sie, wie Sie Daten aus dem Container auf dem Hostcomputer zugänglich machen.

Voraussetzungen

Um diesem Artikel zu folgen, benötigen Sie einen Ubuntu 18.04-Server mit folgenden Eigenschaften:

Wenn Sie Docker noch nicht kennen, bietet dieThe Docker Ecosystem-Serie einen detaillierten Überblick über die wichtigsten Konzepte.

[.note] #Note: Obwohl die Voraussetzungen Anweisungen zum Installieren von Docker unter Ubuntu 18.04 enthalten, sollten diedocker-Befehle für Docker-Datenvolumes in diesem Artikel unter anderen Betriebssystemen funktionieren, solange Docker installiert ist.
#

[[Schritt-1 - Binden eines Volumes]] == Schritt 1 - Binden eines Volumes

Der folgende Befehl erstellt ein Verzeichnis mit dem Namennginxlogs im Ausgangsverzeichnis Ihres aktuellen Benutzers und bindet es an/var/log/nginx im Container:

docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

Nehmen wir uns einen Moment Zeit, um diesen Befehl im Detail zu untersuchen:

  • --name=nginx benennt den Container, damit wir leichter darauf verweisen können.

  • -d trennt den Prozess und führt ihn im Hintergrund aus. Andernfalls sehen wir nur eine leere Nginx-Eingabeaufforderung und können dieses Terminal erst verwenden, wenn wir Nginx getötet haben.

  • -v ~/nginxlogs:/var/log/nginx richtet ein Bindmount-Volume ein, das das Verzeichnis/var/log/nginx aus dem Nginx-Container mit dem Verzeichnis~/nginxlogs auf dem Hostcomputer verknüpft. Docker verwendet:, um den Pfad des Hosts vom Containerpfad zu trennen, und der Hostpfad steht immer an erster Stelle.

  • -p 5000:80 richtet einen Port Forward ein. Der Nginx-Container überwacht standardmäßig Port80. Dieses Flag ordnet den Port80des Containers dem Port5000 auf dem Hostsystem zu.

  • nginx gibt an, dass der Container aus dem Nginx-Image erstellt werden soll, das den Befehlnginx -g "daemon off" zum Starten von Nginx ausgibt.

[.Hinweis]##

Note: Das Flag-v ist sehr flexibel. Es kann ein Volume mit nur geringfügiger Änderung der Syntax binden oder benennen. Wenn das erste Argument mit/ oder~/ beginnt, erstellen Sie ein Bindmount. Entfernen Sie das, und Sie benennen das Volume.

  • -v /path:/path/in/container stellt das Hostverzeichnis bereit,/path bei/path/in/container

  • -v path:/path/in/container erstellt ein Volume mit dem Namenpath ohne Beziehung zum Host.

Weitere Informationen zu benannten Volumes finden Sie unterHow to Share Data Between Docker Containers

[[Schritt 2 - Zugriff auf Daten auf dem Host]] == Schritt 2 - Zugriff auf Daten auf dem Host

Wir haben jetzt eine Kopie von Nginx, die in einem Docker-Container auf unserem Computer ausgeführt wird, und der Port5000unseres Host-Computers wird direkt dieser Kopie von Nginx 'Port80 zugeordnet.

Laden Sie die Adresse in einem Webbrowser unter Verwendung der IP-Adresse oder des Hostnamens Ihres Servers und der Portnummer:http://your_server_ip:5000. Das solltest du sehen:

Nginx Start Page

Interessanterweise sehen wir im Verzeichnis~/nginxlogs auf dem Host dieaccess.log, die durch dienginx des Containers erstellt wurden und unsere Anfrage anzeigen:

cat ~/nginxlogs/access.log

Dies sollte ungefähr so ​​aussehen:

Output203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-"
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

Wenn Sie Änderungen am Ordner~/nginxlogsvornehmen, können Sie diese auch in Echtzeit im Docker-Container anzeigen.

Fazit

In diesem Lernprogramm wurde gezeigt, wie ein Docker-Datenvolumen erstellt wird, um Informationen zwischen einem Container und dem Host-Dateisystem auszutauschen. Dies ist in Entwicklungsumgebungen hilfreich, in denen Zugriff auf Protokolle zum Debuggen erforderlich ist. Weitere Informationen zum Teilen persistenter Daten zwischen Containern finden Sie unterHow To Share Data between Docker Containers.