Sollte ich den Init-Prozess in einem Docker-Container ausführen oder nicht? [geschlossen]

8

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.

    
soupdiver 12.03.2015, 22:51
quelle

1 Antwort

9
  

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.

    
larsks 13.03.2015 00:56
quelle

Tags und Links