2015-03-09 7 views
35

Ich reformiere ein paar node.js Dienste. Alle von ihnen begannen mit forever auf virtuellen Servern, wenn der Prozess abstürzte sie nur neu starten.Sollte ich für immer/pm2 in einem (Docker) Container verwenden?

Jetzt, zu Container-und state-less Anwendungsstrukturen verschieben, ich denke, der Prozess sollte beendet werden und der Container sollte bei einem Fehler neu gestartet werden.

Ist das korrekt? Gibt es Vorteile oder Nachteile?

Antwort

40

Mein Take ist nicht ein In-Container-Prozess-Supervisor (für immer, PM2) und stattdessen docker Neustart Politik über die --restart=always (oder eine der anderen Varianten dieser Option). Dies steht mehr im Einklang mit der gesamten Docker-Philosophie und sollte sehr ähnlich zur Prozessüberwachung im Container funktionieren, da Docker-Container sehr schnell laufen.

Der stärkste Befürworter für die Ausführung von In-Container-Prozessüberwachung, die ich gesehen habe, ist in der phusion baseimage-docker README, wenn Sie die andere Position zu diesem Thema erkunden möchten.

+2

Sie verlieren Null-Ausfallzeit-Implementierungen von Docker mit, though. Mit Bare-Metal-PM2 können Sie Bereitstellungen ohne Bereitstellung eines Lastenausgleichs durchführen. – Nepoxx

+20

Uh, nur, wenn Sie in einem laufenden Container bereitstellen, anstatt einen neuen Container mit dem neuen App-Code neu zu erstellen, wodurch die meisten der von Docker angestrebten Ziele zunichte gemacht werden. Führen Sie auf Load-Balancer-Ebene keine Ausfallzeiten aus. Lassen Sie mehr als eine Instanz Ihrer App laufen. –

+0

Ein weiterer interessanter Punkt hier: Wenn Sie PM2 verwenden, um mehrere Instanzen als Webserver zu starten, müssen Sie eine Anzahl von Host-Ports freilegen und diese auf der LB handhaben, anstatt dass PM2 eine Pseudo-LB ist. Viele Abstraktionen. * seufz * –

15

Zwar ist es eine gute Idee ist, --restart=always als ausfallsicher zu bedienen, Container Neustarten ist relativ langsam (5+ Sekunden mit der einfachen Hallo Welt Node Server here beschrieben), so können Sie App-Ausfallzeiten minimieren so etwas wie forever verwenden.

Ein Nachteil des Verfahrens innerhalb des Behälters neu zu starten ist, dass Crash-Recovery jetzt zwei Weise geschehen kann, die Auswirkungen auf Ihre Überwachung haben könnte usw.

+0

wird beide (für immer und Neustart) verursachen ein anderes Problem oder conflito? Ich lese hier (https://docs.docker.com/engine/admin/host_integration/#/using-a-process-manager), dass die Verwendung eines Prozessmanagers mit Neustart-Richtlinie möglicherweise keine gute Idee ist. Hast du jemals beides versucht? –

+0

PM2 hat eine bestimmte Binärdatei, um Docker zu behandeln, also sollte es in Ordnung sein. Siehe http://pm2.keymmetrics.io/docs/usage/docker-pm2-nodejs/#pm2-docker-helper –

Verwandte Themen