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 vonnginx
im Verzeichnis/var/log/nginx
des Docker Nginx-Containers/var/log/nginx
protokolliert. 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:
-
Ein Nicht-Root-Benutzer mit Sudo-Berechtigungen gemäß der Anleitung vonInitial Server Setup with Ubuntu 18.04.
-
Docker installiert mit den Anweisungen vonStep 1 undStep 2 vonHow To Install and Use Docker on Ubuntu 18.04.
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 Port80
des 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 Port5000
unseres 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:
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~/nginxlogs
vornehmen, 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.