webentwicklung-frage-antwort-db.com.de

Sollte ich/pm2 für immer in einem (Docker) -Container verwenden?

Ich überarbeite ein paar node.js-Dienste. Alle starteten früher mit forever auf virtuellen Servern. Wenn der Prozess abstürzte, wurde ein Neustart durchgeführt.

Wenn ich jetzt zu Container- und zustandslosen Anwendungsstrukturen übergeht, denke ich, dass der Prozess beendet werden sollte und der Container bei einem Fehler neu gestartet werden sollte.

Ist das korrekt? Gibt es Vor- oder Nachteile?

39
Patrick

Mein Take ist, dass Sie keinen in-container Prozess Supervisor verwenden (forever, pm2) und stattdessen die Docker-Neustartrichtlinie über --restart=always (oder eine der anderen Varianten dieser Option) verwenden. Dies entspricht eher der allgemeinen Docker-Philosophie und sollte der Überwachung von Prozessen im Container sehr ähnlich sein, da Docker-Container sehr schnell laufen.

Der stärkste Befürworter für die Überwachung von In-Container-Prozessen, den ich je gesehen habe, ist im phusion baseimage-docker README , wenn Sie die andere Position zu diesem Thema erkunden möchten.

46
Peter Lyons

Obwohl es eine gute Idee ist, --restart=always als Ausfallsicherheit zu verwenden, ist der Neustart des Containers relativ langsam (5 Sekunden mit dem einfachen Hello World Node-Server hier ). So können Sie die Ausfallzeit von Apps mithilfe von forever reduzieren.

Ein Nachteil des Neustarts des Prozesses innerhalb des Containers ist, dass die Wiederherstellung nach einem Absturz jetzt zwei Wege erfolgen kann, was Auswirkungen auf Ihre Überwachung haben kann usw.

18
Aidan Feldman

Für den Knoten muss das Clustering eingerichtet werden, wenn Sie auf einem Server mit mehreren CPUs ausgeführt werden.

Mit PM2 erhalten Sie das, ohne zusätzlichen Code zu schreiben. http://pm2.keymetrics.io/docs/usage/cluster-mode/

Wenn Sie nicht eine Reihe von Servern mit einzelnen CPU-Instanzen verwenden, würden Sie PM2 in der Produktion verwenden.

der Neustart von pm2 ist schneller als das Andockfenster

0
Richard Torcato