1. ホーム
  2. docker

[解決済み] pm2とdockerを一緒に使う意味は何ですか?

2022-12-13 07:14:24

質問

私たちは、サーバー上でアプリケーションを実行するために、非常にうまく pm2 を使用してきました。現在、私たちは docker に移行していますが、その際に http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/

しかし、実際に両方を一緒に使う意味はあるのでしょうか?dockerはpm2ができることをすべて提供しているのではないのでしょうか?

どのように解決するのでしょうか?

通常、docker の内部で pm2 を使う意味はありません。

PM2 と Docker はどちらもプロセスマネージャであり、ログ転送やクラッシュしたワーカーの再起動、その他多くのことを行うことができます。もし、Dockerコンテナの内部でpm2を実行すれば、少なくとも以下のようなサービスの潜在的な問題を隠すことができます。

1) pm2 を使ってコンテナごとに単一のプロセスを実行する場合、メモリ消費量の増加を除けばあまり得るものはないでしょう。再起動は、純粋なドッカーで 再起動ポリシー . 他のdockerベースの環境(ECSやKubernetesなど)でも可能です。

2) 複数のプロセスを実行すると、監視が難しくなります。CPU/Memoryのメトリクスは、囲い込まれた環境から直接利用できなくなります。

3) 単一の PM2 プロセスに対するヘルスチェックのリクエストはワーカーに分散され、不健全な対象を隠してしまう可能性があります。

4) ワーカーのクラッシュは pm2 によって隠されます。監視システム(CloudWatchなど)からはほとんどわからないでしょう。

5) 事実上、複数のレベルのロードバランシングを行うことになるため、ロードバランシングがより複雑になります。

また、Dockerコンテナ内で複数のプロセスを実行することは、コンテナごとに単一のプロセスを維持するというDockerの哲学と矛盾しています。

私が思いつくシナリオのひとつは、docker 環境に対する制御が非常に限られている場合です。この場合、pm2 を実行することが、ワーカーのスケジューリングを制御するための唯一の選択肢になるかもしれません。