Docker Container Status prüfen: So geht's!

DockerBeginner
Jetzt üben

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:

  1. Erstellen und Ausführen von Containern - Sie haben gelernt, wie man Docker-Container mit dem Befehl docker run erstellt und ausführt.

  2. Grundlegende Statusüberprüfung - Sie haben den Befehl docker ps gemeistert, um laufende Container aufzulisten und ihre grundlegenden Statusinformationen zu überprüfen.

  3. Erweiterte Überwachung - Sie haben erweiterte Überwachungstechniken mit docker inspect und docker stats erkundet, um detaillierte Containerinformationen und Echtzeit-Leistungsmetriken zu erhalten.

  4. 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.

  5. 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.