-1

私はプレフォークモデルのサーバーを持っています。つまり、アプリケーションが起動し、ポートにソケットをバインドし、X 回フォークするため、すべての子が同じポートを共有します。

このアプリケーションを docker の下に移植したいと考えています。私の理解では、使いやすさを向上させるために、1 つの Docker インスタンスでサーバーの 1 つだけを実行する必要があります。したがって、プロセスの 5 つのインスタンスを実行したい場合は、5 つの Docker インスタンスをすべて実行して、アプリケーションを 1 回実行する必要があります。私はこれまでのところ正しいですか?

はいの場合、私の問題は、すべての Docker インスタンスをすべて同じポートで実行することは可能ですか?

サービスのポート範囲をマップするリバース プロキシを使用できることに同意しますが、可能であればこれを避けたいと思います。

4

1 に答える 1

0

Docker は、プロセスが子をフォークしたり、マルチスレッドで実行したりできるコンテナーのプロセス名前空間を提供します。docker コンテナー内でマルチプロセス アプリケーションを簡単に実行できます。実際、bash シェルを実行し、bash 内で他の cli コマンドを実行するときはいつでも実行できます。

唯一の要件は、起動するプロセスがpid 1 として Linux システムdocker runでの役割を担うinitことです。つまり、pid 1 が終了すると、コンテナー全体がすぐに終了します。したがって、メイン プロセスはフォアグラウンドで実行し続ける必要があります。

また、プロセスが終了時に親によってリープされず、ゾンビ状態になった場合、それらはホスト OS の init によって自動的に消去されません (ゾンビ プロセスは名前空間を超えて伝播しません。これを解決するために、プロジェクトがあります。コンテナ内の初期化置換として機能するtiniのように。

于 2016-08-20T00:52:52.077 に答える