Ein Programm als Dienst oder direkt ausführen, was ist der Unterschied

Ein Programm als Dienst oder direkt ausführen, was ist der Unterschied

Dies ist möglicherweise eine etwas verwirrende Frage …

Ich habe vor Kurzem begonnen, mit Docker herumzuspielen und versuche, einen einfachen Lamp-Server einzurichten.

Ich habe ein Docker-Image von CentOS mit httpd, PHP und MySQL.

Allerdings kann ich in einem Docker-Container die Dienste nicht so starten, wie ich es normalerweise über systemd / service tun würde.

Ich kann httpd direkt zum Laufen bringen über/usr/sbin/httpd

Welchen Unterschied macht es also ggf. aus, wenn httpd via /usr/sbin/httpdstatt via ausgeführt wird systemctl start httpd?

Gibt es eine „richtige“ Möglichkeit, httpd zu stoppen oder neu zu starten? – Ich dachte, ich könnte den Prozess einfach beenden, aber anscheinend werden dadurch etwa 10 Apache-Prozesse gestartet.

Ich weiß, dass dies keine besonders gut fokussierte Frage ist, aber ich bin für jeden Hinweis auf relevantes Material dankbar.

Antwort1

Sie können nicht verwenden systemctl, wenn Ihre PID 1 nicht systemd ist. Sie können Ihre PID 1 mit finden ps -q 1.

Die Möglichkeit, Dienste auf normale Weise zu starten und zu stoppen, ist ein Vorteil, der in diesem Artikel erwähnt wird überAusführen von systemd in einem nicht privilegierten Container. Andere protokollieren oder verfolgen untergeordnete Prozesse, wie in Andreis Antwort beschrieben.

Antwort2

Ein systemd-Dienst startet den Prozess auf ähnliche Weise wie bei der direkten Ausführung, behält jedoch alle gegabelten Prozesse und Threads im Auge. Dies bedeutet, dass systemctl stop apachealle untergeordneten Prozesse heruntergefahren werden, wenn Sie ihn ausführen. Die Verwendung von systemd-Prozessen ist auch praktisch, da sie im Hintergrund ausgeführt werden und beim Systemstart gestartet werden können.

Antwort3

Angesichts Ihres Lernfortschritts würde ich für Ihre Aufgabe nicht Docker verwenden.

Wenn Sie Docker zur Prozessisolierung verwenden, können Sie dafür eindeutige Unix-Benutzer verwenden. Alternativ enthält systemd auch Anweisungen, um den Zugriff eines systemd-Dienstes einzuschränken. Siehe beispielsweise Capabilities=in man systemd.exec.

Außerdem würden Sie zur Prozessisolierung mit Docker die Datenbank und den Webserver jeweils in unterschiedlichen Docker-Containern ausführen.

Eine weitere wichtige Funktion systemdist die Prozessverwaltung. Das heißt: Wenn Ihr httpdProzess abstürzt, wird er von systemd für Sie neu gestartet.

Ich empfehle, zunächst alle Ihre Prozesse direkt auf einem Hostserver mit systemd auszuführen. Viele moderne Pakete verfügen systemdbereits über Konfigurationsdateien.

Sobald Sie ein gutes Verständnis davon haben systemdund sich darüber im Klaren sind, welchen Nutzen das Hinzufügen von Docker bietet, können Sie die Einbeziehung von Docker in die Mischung in Betracht ziehen.

Bei meiner Arbeit haben wir versucht, eine Reihe von Diensten mit Docker zu verwalten. Später haben wir uns jedoch an die direkte Verwaltung gewöhnt. systemdDas Ergebnis ist ein saubereres, vom Team bevorzugtes System mit weniger bashSkripten zum Zusammenfügen und Verwalten der Dinge.

verwandte Informationen