Verwalten des Webserver-Containers als systemd-Dienst
In diesem letzten Schritt lernen Sie, wie Sie einen Container so konfigurieren, dass er automatisch startet, um sicherzustellen, dass Ihr Dienst gegen Abstürze oder Systemneustarts widerstandsfähig ist. Auf einem Standard-Red Hat Enterprise Linux-System ist systemd
das primäre Werkzeug zur Verwaltung von Diensten. Die Podman-Umgebung in diesem Lab verwendet jedoch systemd
nicht, um Container direkt zu verwalten.
Stattdessen werden wir das gleiche Ergebnis – automatische Neustarts des Dienstes – mit den integrierten Restart-Richtlinien von Podman erreichen. Dies ist die Standardmethode, die für Container geeignet ist, um sicherzustellen, dass ein Container automatisch vom Podman-Daemon gestartet wird. Wir werden unseren web_server
so konfigurieren, dass er immer neu gestartet wird, wenn er aus irgendeinem Grund anhält.
Zuerst müssen wir den bestehenden Container entfernen, da Neustartrichtlinien nur angewendet werden können, wenn ein Container erstellt wird.
Stoppen Sie den web_server
-Container:
podman stop web_server
web_server
Und jetzt entfernen Sie ihn:
podman rm web_server
web_server
Als Nächstes erstellen Sie den web_server
-Container mit der gleichen Konfiguration wie zuvor neu, aber fügen Sie das Flag --restart always
hinzu. Dieses Flag weist den Podman-Daemon an, den Container zu überwachen und ihn neu zu starten, wenn er jemals beendet wird.
podman run -d \
--name web_server \
--network webapp-network \
-v $(pwd)/webapp_content:/usr/local/apache2/htdocs/:Z \
-p 8080:80 \
--restart always \
httpd:2.4
Der Container startet wie gewohnt. Um zu bestätigen, dass die Neustartrichtlinie aktiv ist, können Sie die Konfiguration des Containers untersuchen.
podman inspect web_server --format '{{.HostConfig.RestartPolicy.Name}}'
Der Befehl sollte always
zurückgeben, was bestätigt, dass die Richtlinie festgelegt ist.
always
Lassen Sie uns nun demonstrieren, wie die Neustartrichtlinie funktioniert, indem wir den Container manuell neu starten, um zu simulieren, was nach einem Systemneustart oder einem Containerfehler passieren würde.
Überprüfen wir zuerst die aktuelle Konfiguration der Neustartrichtlinie:
podman inspect web_server --format '{{.HostConfig.RestartPolicy.Name}}'
Dies sollte always
anzeigen, was bestätigt, dass unsere Neustartrichtlinie konfiguriert ist.
always
Testen wir nun den manuellen Neustart, um die Wiederherstellung nach einem Fehler zu simulieren:
podman start web_server
web_server
Überprüfen Sie, ob der Container läuft:
podman ps
Sie sollten beide Container mit der Neustartrichtlinie sehen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7f6g5h4i3j2 httpd:2.4 "httpd-foreground" About a minute ago Up 5 seconds 0.0.0.0:8080->80/tcp web_server
a1b2c3d4e5f6 mariadb:10.6 "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp mariadb_server
Bestätigen Sie abschließend, dass der Dienst zugänglich ist:
curl http://localhost:8080
<h1>Welcome to My Web App</h1>
Verständnis der Neustartrichtlinien:
Die von Ihnen konfigurierte Richtlinie --restart always
stellt sicher, dass:
- Der Container automatisch neu gestartet wird, wenn er unerwartet beendet wird
- Der Container automatisch gestartet wird, wenn der Podman-Dienst startet (z. B. nach einem Systemneustart)
- Dies bietet Ausfallsicherheit für Produktionsbereitstellungen
Hinweis: In einigen Lab-Umgebungen kann das automatische Neustartverhalten je nach Podman-Konfiguration und ob der Podman-Systemdienst ausgeführt wird, variieren. Das wichtigste Lernziel ist das Verständnis, wie Neustartrichtlinien für Produktionsbereitstellungen konfiguriert werden.
Sie haben Ihren Container erfolgreich so konfiguriert, dass er wie ein Dienst verwaltet wird, wodurch sichergestellt wird, dass er automatisch verfügbar bleibt. Dies schließt das grundlegende Lifecycle-Management einer containerisierten Anwendung ab.