Einführung
Docker hat die Art und Weise, wie wir Anwendungen entwickeln, bereitstellen und verwalten, revolutioniert. Als leistungsstarke Containerisierungsplattform ermöglicht Docker das Verpacken Ihrer Anwendungen und deren Abhängigkeiten in isolierten, portablen Umgebungen. Zu wissen, wie man den Status Ihrer Docker-Container überprüft, ist für ein effektives Management und die Fehlerbehebung unerlässlich.
In diesem praktischen Lab werden Sie die wesentlichen Befehle zum Überwachen Ihrer Docker-Container erlernen, deren Status verstehen und ihren Lebenszyklus verwalten. Am Ende dieses Tutorials werden Sie in der Lage sein, den Status Ihrer Docker-Container sicher zu überprüfen und zu verwalten, um eine effiziente Anwendungsentwicklung und -bereitstellung zu gewährleisten.
Erstellen und Ausführen eines Docker-Containers
Bevor wir den Status von Docker-Containern überprüfen können, müssen wir einige Container am Laufen haben. In diesem Schritt erstellen und starten wir einen einfachen Docker-Container.
Docker-Container verstehen
Docker-Container sind leichtgewichtige, eigenständige, ausführbare Softwarepakete, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird: Code, Laufzeit, Systemwerkzeuge, Bibliotheken und Einstellungen. Sie bieten konsistente Umgebungen über verschiedene Entwicklungsstadien hinweg.
Vorteile der Verwendung von Docker-Containern sind:
- Konsistente Laufzeitumgebungen
- Isolation von anderen Anwendungen
- Schnelle Bereitstellung und Skalierung
- Effiziente Ressourcenauslastung
Überprüfen der Docker-Installation
Lassen Sie uns zunächst überprüfen, ob Docker korrekt auf dem System installiert ist:
docker --version
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Docker version 20.10.21, build baeda1f
Ausführen Ihres ersten Containers
Lassen Sie uns einen einfachen Container mit dem offiziellen Nginx-Webserver-Image ausführen. Dies gibt uns einen Container, den wir in den folgenden Schritten überwachen können.
Führen Sie den folgenden Befehl in Ihrem Terminal aus:
docker run --name my-nginx -d -p 8080:80 nginx
Dieser Befehl:
- Erstellt einen Container mit dem Namen
my-nginx - Führt ihn im Detached-Modus (
-d) aus, was bedeutet, dass er im Hintergrund läuft - Mappt Port 8080 des Hosts auf Port 80 des Containers (
-p 8080:80) - Verwendet das offizielle
nginx-Image von Docker Hub
Sie sollten eine lange Zeichenkette sehen, die die Container-ID ist:
a72369167c214c20247f786a47b6b0b8581b60324bd2d151a7a0db8ddb024959
Lassen Sie uns nun überprüfen, ob der Container läuft:
docker ps
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a72369167c21 nginx "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 0.0.0.0:8080->80/tcp my-nginx
Herzlichen Glückwunsch! Sie haben erfolgreich einen Docker-Container erstellt und gestartet. Im nächsten Schritt werden wir detaillierter untersuchen, wie man den Status dieses Containers überprüft.
Grundlegende Container-Statusbefehle
Nachdem wir nun einen laufenden Container haben, wollen wir lernen, wie man seinen Status mit den gängigsten Docker-Befehlen überprüft.
Verwendung des Befehls docker ps
Der Befehl docker ps ist die grundlegendste Methode, um laufende Container anzuzeigen.
docker ps
Die Ausgabe sollte ähnlich aussehen wie:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a72369167c21 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp my-nginx
Dieser Befehl zeigt:
- CONTAINER ID: Die eindeutige Kennung für den Container
- IMAGE: Das Docker-Image, das zum Erstellen des Containers verwendet wurde
- COMMAND: Der Befehl, der innerhalb des Containers ausgeführt wird
- CREATED: Wann der Container erstellt wurde
- STATUS: Der aktuelle Status des Containers
- PORTS: Port-Mappings zwischen Host und Container
- NAMES: Der zugewiesene Name des Containers
Anzeigen aller Container
Der grundlegende docker ps-Befehl zeigt nur laufende Container an. Um alle Container anzuzeigen, einschließlich der gestoppten, verwenden Sie:
docker ps -a
Dies zeigt alle Container an, unabhängig von ihrem Zustand:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a72369167c21 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp my-nginx
Derzeit haben wir nur einen Container, aber wenn Sie gestoppte Container hätten, würden diese hier ebenfalls angezeigt werden.
Container-Status mit Formatierung
Sie können die Ausgabe von docker ps anpassen, um nur die Informationen anzuzeigen, die Sie benötigen, indem Sie die Option --format verwenden:
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Dies zeigt eine vereinfachte Tabelle mit nur den Containernamen, dem Status und den Ports an:
NAMES STATUS PORTS
my-nginx Up 7 minutes 0.0.0.0:8080->80/tcp
Stoppen eines Containers
Lassen Sie uns unseren Container stoppen, um zu sehen, wie sich sein Status ändert:
docker stop my-nginx
Ausgabe:
my-nginx
Überprüfen Sie nun den Status erneut:
docker ps
Sie werden feststellen, dass der Container nicht mehr in der Liste der laufenden Container aufgeführt ist. Um ihn zu sehen, verwenden Sie:
docker ps -a
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a72369167c21 nginx "/docker-entrypoint.…" 10 minutes ago Exited (0) 10 seconds ago my-nginx
Der Status des Containers hat sich in "Exited" geändert, was darauf hindeutet, dass er nicht mehr läuft.
Starten eines Containers
Starten wir den Container erneut:
docker start my-nginx
Ausgabe:
my-nginx
Überprüfen Sie den Status, um zu bestätigen, dass er läuft:
docker ps
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a72369167c21 nginx "/docker-entrypoint.…" 12 minutes ago Up 5 seconds 0.0.0.0:8080->80/tcp my-nginx
Großartig! Sie verstehen jetzt, wie Sie den grundlegenden Status von Docker-Containern mit dem Befehl docker ps überprüfen und wie Sie Container stoppen und starten können.
Erweiterte Container-Überwachung
Nachdem Sie nun die Grundlagen der Überprüfung des Container-Status verstehen, wollen wir uns mit fortgeschritteneren Überwachungsbefehlen befassen, die detaillierte Informationen über Ihre Container liefern.
Detaillierte Container-Informationen mit docker inspect
Der Befehl docker inspect liefert detaillierte Konfigurations- und Laufzeitinformationen über einen Container:
docker inspect my-nginx
Dieser Befehl gibt ein JSON-Array mit umfassenden Informationen über den Container zurück. Die Ausgabe ist recht lang, enthält aber:
- Netzwerkeinstellungen
- Volume-Mounts
- Umgebungsvariablen
- Ressourcenbeschränkungen
- Container-Zustand
- Und vieles mehr
Betrachten wir einen bestimmten Abschnitt mit der Option --format:
docker inspect --format='{{.State.Status}}' my-nginx
Ausgabe:
running
Sie können andere spezifische Informationen extrahieren:
docker inspect --format='{{.NetworkSettings.IPAddress}}' my-nginx
Dies zeigt die interne IP-Adresse des Containers an.
Echtzeit-Container-Metriken mit docker stats
Der Befehl docker stats liefert einen Live-Stream von Container-Ressourcenauslastungsstatistiken:
docker stats my-nginx
Sie sehen eine Ausgabe ähnlich der folgenden:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a72369167c21 my-nginx 0.00% 2.312MiB / 7.764GiB 0.03% 1.05kB / 1.51kB 0B / 4.1kB 2
Dies zeigt:
- CPU-Auslastung in Prozent
- Speicherauslastung
- Netzwerk-I/O
- Block-I/O
- Anzahl der Prozesse
Drücken Sie Ctrl+C, um die Live-Statistikansicht zu verlassen.
Um Statistiken für alle Container gleichzeitig anzuzeigen:
docker stats --no-stream
Dies zeigt eine Momentaufnahme der Statistiken ohne die kontinuierlichen Aktualisierungen.
Anzeigen von Container-Logs
Um Probleme zu beheben, ist es oft nützlich, die Logs des Containers zu überprüfen:
docker logs my-nginx
Sie sehen die Logs vom Nginx-Server. Wenn Sie auf den Webserver zugegriffen haben, sehen Sie HTTP-Anfrage-Logs.
Um den Logs in Echtzeit zu folgen (ähnlich wie tail -f):
docker logs -f my-nginx
Drücken Sie Ctrl+C, um den Log-Stream zu verlassen.
Überprüfen der Container-Prozesse
Um die Prozesse anzuzeigen, die in einem Container ausgeführt werden:
docker top my-nginx
Die Ausgabe sieht ähnlich aus wie:
UID PID PPID C STIME TTY TIME CMD
root 12345 12321 0 14:15 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 12401 12345 0 14:15 ? 00:00:00 nginx: worker process
Dies zeigt alle Prozesse an, die innerhalb des Containers ausgeführt werden, ihre PIDs und die Ressourcenauslastung.
Erstellen eines neuen Containers zum Vergleich
Lassen Sie uns einen weiteren Container erstellen, um ihn mit unserem bestehenden zu vergleichen:
docker run --name redis-server -d redis
Vergleichen wir nun die Statistiken beider Container:
docker stats --no-stream my-nginx redis-server
Sie sollten Statistiken für beide Container sehen, sodass Sie ihre Ressourcenauslastung vergleichen können.
Diese erweiterten Überwachungsbefehle geben Ihnen tiefere Einblicke in die Gesundheit und Leistung Ihrer Container, was für die Fehlerbehebung und die Optimierung der Ressourcenauslastung unerlässlich ist.
Verwalten des Container-Lebenszyklus
Das Verständnis, wie man den Lebenszyklus eines Containers verwaltet, ist für eine effektive Docker-Nutzung entscheidend. In diesem Schritt werden wir verschiedene Befehle zur Steuerung der Container-Zustände und zum Verständnis des Container-Lebenszyklus untersuchen.
Container-Lebenszyklus-Zustände
Ein Docker-Container kann sich in verschiedenen Zuständen befinden:
- Created (Erstellt): Container ist erstellt, aber nicht gestartet
- Running (Läuft): Container läuft gerade
- Paused (Pausiert): Die Containerausführung ist pausiert
- Stopped (Gestoppt): Container ist gestoppt, existiert aber noch
- Removed (Entfernt): Container ist gelöscht
Lassen Sie uns untersuchen, wie man zwischen diesen Zuständen wechselt.
Erstellen eines Containers, ohne ihn zu starten
Sie können einen Container erstellen, ohne ihn mit dem Befehl create zu starten:
docker create --name test-container nginx
Dies erstellt einen Container, startet ihn aber nicht. Überprüfen Sie seinen Status:
docker ps -a
Sie sollten den neuen Container mit dem Status "Created" sehen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4ab92d1234 nginx "/docker-entrypoint.…" 5 seconds ago Created test-container
a72369167c21 nginx "/docker-entrypoint.…" 40 minutes ago Up 30 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 6379/tcp redis-server
Starten eines erstellten Containers
Um den erstellten Container zu starten:
docker start test-container
Überprüfen Sie, ob er läuft:
docker ps
Pausieren und Fortsetzen von Containern
Docker ermöglicht es Ihnen, einen Container zu pausieren, wodurch alle Prozesse darin eingefroren werden:
docker pause test-container
Überprüfen Sie seinen Status:
docker ps
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4ab92d1234 nginx "/docker-entrypoint.…" 2 minutes ago Up 1 minute (Paused) test-container
a72369167c21 nginx "/docker-entrypoint.…" 42 minutes ago Up 32 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 6379/tcp redis-server
Um den Container fortzusetzen:
docker unpause test-container
Überprüfen Sie, ob er wieder läuft:
docker ps
Stoppen und Neustarten von Containern
Um einen Container ordnungsgemäß zu stoppen (Senden von SIGTERM, dann SIGKILL nach einer Gnadenfrist):
docker stop test-container
Um einen Container zwangsweise zu beenden (Senden von SIGKILL):
docker start test-container ## Starten Sie ihn zuerst wieder
docker kill test-container ## Dann beenden Sie ihn
Um einen Container neu zu starten (stoppt und startet ihn erneut):
docker start test-container ## Starten Sie ihn zuerst wieder
docker restart test-container
Entfernen von Containern
Um einen gestoppten Container zu entfernen:
docker stop test-container ## Stellen Sie sicher, dass er zuerst gestoppt ist
docker rm test-container
Überprüfen Sie, ob er verschwunden ist:
docker ps -a | grep test-container
Sie sollten keine Ausgabe erhalten, was darauf hindeutet, dass der Container entfernt wurde.
Entfernen eines laufenden Containers
Sie können einen laufenden Container zwangsweise entfernen:
docker run --name temp-container -d nginx
docker rm -f temp-container
Container-Neustartrichtlinien
Docker ermöglicht es Ihnen, Neustartrichtlinien für Container festzulegen:
docker run --name always-restart --restart always -d nginx
Dieser Container wird automatisch neu gestartet, wenn er beendet wird oder wenn Docker neu gestartet wird.
Überprüfen Sie die Neustartrichtlinie:
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' always-restart
Ausgabe:
always
Lassen Sie uns diesen Container stoppen und entfernen:
docker rm -f always-restart
Das Verständnis dieser Lebenszyklusbefehle gibt Ihnen die vollständige Kontrolle über Ihre Docker-Container und ermöglicht es Ihnen, ihre Zustände effizient basierend auf Ihren Anwendungsanforderungen zu verwalten.
Behebung von Container-Problemen
Selbst bei ordnungsgemäßer Überwachung und Verwaltung können Container manchmal Probleme aufweisen. In diesem Schritt erfahren Sie, wie Sie gängige Container-Probleme mithilfe der Diagnosewerkzeuge von Docker beheben können.
Häufige Container-Probleme
Container können aus verschiedenen Gründen fehlschlagen:
- Anwendungsabstürze
- Ressourcenbeschränkungen
- Konfigurationsprobleme
- Netzwerkprobleme
- Berechtigungsfehler
Lassen Sie uns untersuchen, wie man diese Probleme identifiziert und diagnostiziert.
Erstellen eines problematischen Containers
Erstellen wir einen Container, der aufgrund eines ungültigen Befehls sofort beendet wird:
docker run --name problematic -d nginx sleep 5
Dieser Container führt den Befehl sleep 5 aus und beendet sich dann nach 5 Sekunden.
Warten Sie ein paar Sekunden und überprüfen Sie dann seinen Status:
docker ps -a
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a2b3c4d5e6f nginx "sleep 5" 10 seconds ago Exited (0) 5 seconds ago problematic
a72369167c21 nginx "/docker-entrypoint.…" 1 hour ago Up 50 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 30 minutes ago Up 30 minutes 6379/tcp redis-server
Der Container wurde mit dem Code 0 (Erfolg) beendet, läuft aber nicht mehr.
Überprüfen der Container-Exit-Codes
Der Exit-Code kann Ihnen sagen, warum ein Container gestoppt wurde:
- 0: Erfolg
- Nicht-Null: Fehler aufgetreten
Um den Exit-Code anzuzeigen:
docker inspect problematic --format='{{.State.ExitCode}}'
Ausgabe:
0
Dies bedeutet, dass der Container nach Abschluss seiner zugewiesenen Aufgabe erfolgreich beendet wurde.
Untersuchen der Container-Logs
Logs sind für die Fehlerbehebung unerlässlich:
docker logs problematic
In diesem Fall sehen Sie möglicherweise keine Ausgabe, da unser sleep-Befehl keine Logs erzeugt.
Erstellen wir einen weiteren problematischen Container, der Logs generiert:
docker run --name crash-test -d nginx sh -c "echo 'Starting container'; sleep 2; echo 'About to crash'; exit 1"
Überprüfen Sie nach ein paar Sekunden seinen Status und die Logs:
docker ps -a | grep crash-test
Ausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1e2d3c4b5a6 nginx "sh -c 'echo 'Starti…" 10 seconds ago Exited (1) 7 seconds ago crash-test
Überprüfen Sie nun die Logs:
docker logs crash-test
Ausgabe:
Starting container
About to crash
Diese Logs liefern Hinweise darauf, was vor dem Absturz des Containers geschah.
Überprüfen der Ressourcenauslastung
Ressourcenbeschränkungen können dazu führen, dass Container abstürzen oder schlecht abschneiden:
docker stats --no-stream my-nginx
Dies zeigt die CPU-, Speicher- und I/O-Auslastung an, was bei der Identifizierung von Ressourcenengpässen helfen kann.
Überprüfen der Container-Konfiguration
Fehlkonfiguration ist eine häufige Ursache für Probleme:
docker inspect my-nginx
Achten Sie auf:
- Volume-Mounts
- Umgebungsvariablen
- Netzwerkeinstellungen
- Ressourcenbeschränkungen
Zugriff auf einen laufenden Container
Um Probleme innerhalb eines laufenden Containers zu debuggen:
docker exec -it my-nginx bash
Dies gibt Ihnen eine Shell innerhalb des Containers, in der Sie Befehle ausführen können, um Probleme zu diagnostizieren:
ls -la
ps aux
cat /etc/nginx/nginx.conf
exit ## Um die Container-Shell zu verlassen
Bereinigung
Lassen Sie uns unsere problematischen Container bereinigen:
docker rm problematic crash-test
Durch die Beherrschung dieser Fehlerbehebungstechniken können Sie Probleme mit Ihren Docker-Containern schnell identifizieren und beheben und so sicherstellen, dass Ihre Anwendungen reibungslos und zuverlässig laufen.
Zusammenfassung
In diesem praktischen Lab haben Sie grundlegende Fähigkeiten zur Überwachung und Verwaltung von Docker-Containern erworben:
Erstellen und Ausführen von Containern - Sie haben gelernt, wie man Docker-Container mit dem Befehl
docker runerstellt und ausführt.Grundlegende Statusüberprüfung - Sie haben den Befehl
docker psgemeistert, um laufende Container aufzulisten und ihre grundlegenden Statusinformationen zu überprüfen.Erweiterte Überwachung - Sie haben erweiterte Überwachungstechniken mit
docker inspectunddocker statserkundet, um detaillierte Containerinformationen und Echtzeit-Leistungsmetriken zu erhalten.Container-Lebenszyklus-Management - Sie haben gelernt, wie man den vollständigen Lebenszyklus eines Containers verwaltet, einschließlich Erstellen, Starten, Stoppen, Pausieren und Entfernen von Containern.
Fehlerbehebung - Sie haben Fähigkeiten entwickelt, um gängige Container-Probleme mithilfe von Logs, Ressourcenüberwachung und direktem Containerzugriff zu diagnostizieren und zu beheben.
Diese Fähigkeiten sind grundlegend für die effektive Arbeit mit Docker-Containern in Entwicklungs-, Test- und Produktionsumgebungen. Sie können jetzt selbstbewusst die Gesundheit Ihrer Container überwachen, ihren Lebenszyklus verwalten und Probleme beheben, wenn sie auftreten.
Um Ihre Docker-Reise fortzusetzen, sollten Sie Themen wie Docker Compose für Multi-Container-Anwendungen, Docker-Networking und Container-Orchestrierung mit Kubernetes in Betracht ziehen.



