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.