Ich habe kürzlich einige Best Practices zu Docker recherchiert und bin dabei auf verschiedene Meinungen darüber eingegangen, wie oder ob ich mit dem Init-Prozess umgehen soll.
Wie hier hervorgehoben wurde, sollte der init-Prozess nicht sein überhaupt laufen lassen. Ich kann dem Gedanken folgen, dass ein Container einen einzelnen Prozess und nicht das gesamte Betriebssystem modellieren sollte.
Auf der anderen Seite kann es, wie beschrieben hier zu Problemen kommen, wenn ich einfach die grundlegenden OS-Dienste wie syslog. Wie oft gibt es vielleicht keine absolute Antwort darauf, wie man mit diesen Fällen umgeht. Kannst du einige Erfahrungen oder mehr Einblicke zu diesem Thema teilen? Für mich scheinen beide angetreten zu sein.
Wie oft gibt es vielleicht keine absolute Antwort darauf, wie man damit umgeht Fälle. Kannst du einige Erfahrungen oder mehr Einblicke darüber teilen? Thema? Für mich scheinen beide angetreten zu sein.
Finde es. Es gibt keine absolute Antwort auf diese Frage.
Nun, nachdem ich das gesagt habe, denke ich, dass es erhebliche Vorteile gibt zum Single-Prozess-pro-Container-Modell, weil das wirklich ermutigt Sie, Container zu erstellen, die zusammensetzbar sind (wie Lego) Blöcke: Sie können sie in verschiedenen Kombinationen zusammenfügen, um ein zu lösen Problem) und das sind skalierbar (Sie können mehr Instanzen eines besonderer Service ohne zu viel Aufwand). Indem du nicht verrückt machst Dinge wie das Ausführen eines SSH-Daemon in Ihrem Container, Sie sind davon abgeraten, Dinge "an Ort und Stelle" zu bearbeiten und wird - hoffentlich - sein eher auf Dockerfiles verlassen, um Ihre Bilder zu generieren, die führt zu einem viel robusteren, reproduzierbaren Prozess.
Auf der anderen Seite gibt es einige Anwendungen, die nicht verleihen
sich gut zu diesem Modell. Zum Beispiel, wenn Sie eine haben
Anwendung, die viele Kinder verarbeitet und nicht richtig funktioniert
wait()
für sie endet am Ende eine Sammlung von Zombie-Prozessen.
Sie können einen vollständigen Prozess init
ausführen, um dieses Problem zu lösen
Problem, oder Sie können etwas einfaches liken
dies (Disclaimer: Ich schrieb das) oder
das .
Einige Anwendungen sind nur sehr eng miteinander verbunden
möglich, sie in getrennten Behältern durch liberale laufen zu lassen
Anwendung von Docker Volumes und --net=container:...
, es ist einfacher
nur um sie im selben Container laufen zu lassen.
Das Anmelden bei Docker ist eine besondere Herausforderung. Running einige Art von
Log-Sammler in einem Container zusammen mit Ihrer Anwendung sein kann
eine Lösung für dieses Problem, aber es gibt auch andere Lösungen.
Logspout ist interessant
ein, aber ich habe auch versucht, systemd hinein zu laufen
Container, um journald
für die Protokollierung zu verwenden. Also, während
Ich führe immer noch einen -Anwendung Prozess pro Container, ich auch
Habe einen init
Prozess und einen journald
Prozess.
Letztendlich kommt es wirklich auf die Situation an: sowohl auf Ihre Bedürfnisse und die Anforderungen der jeweiligen Anwendung, die Sie ausführen möchten. Auch in Situationen, in denen ein einzelner Prozess pro Container nicht vorhanden ist möglich, Container zu entwerfen, um einen einzelnen Service anzubieten bringt viele der Vorteile, die ich im ersten Absatz erwähnt habe.