私たちは、サーバー上でアプリケーションを実行するためにpm2をかなりうまく使ってきました。現在dockerに移行しており、詳しくは、http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/ をご覧ください。
しかし、実際に両方を一緒に使用する意味は何でしょうか? docker は pm2 が提供するものすべてを提供しませんか?
ベストアンサー1
通常、docker 内で pm2 を使用する意味はありません。
PM2 と Docker はどちらもプロセス マネージャーであり、ログ転送、クラッシュしたワーカーの再起動など、さまざまな機能を実行できます。Docker コンテナー内で pm2 を実行すると、少なくとも次の点において、サービスに関する潜在的な問題が隠されます。
1) pm2でコンテナごとに1つのプロセスを実行すると、メモリ消費量の増加以外に大きなメリットはありません。再起動は純粋なdockerで実行できます。再起動ポリシー他の Docker ベースの環境 (ECS や Kubernetes など) でも同様に実行できます。
2) 複数のプロセスを実行すると、監視が難しくなります。CPU/メモリ メトリックは、囲む環境で直接利用できなくなります。
3) 単一のPM2プロセスに対するヘルスチェック要求はワーカー間で分散されるため、不健全なターゲットが隠れてしまう可能性がある。
4) ワーカーのクラッシュは pm2 によって隠されます。監視システム (CloudWatch など) からそのクラッシュについて知ることはほとんどありません。
5) 実質的には複数レベルの負荷分散が必要になるため、負荷分散はより複雑になります。
また、Docker コンテナ内で複数のプロセスを実行することは、コンテナごとに 1 つのプロセスを維持するという Docker の理念に反します。
考えられるシナリオの 1 つは、Docker 環境の制御が非常に限られている場合です。この場合、pm2 を実行することが、ワーカーのスケジュールを制御する唯一のオプションである可能性があります。