私は、モノリシックなPHP SymfonyアプリケーションをDockerを使っていくらか拡張性のあるソリューションに移行しようとしています。アプリケーションとRabbitMQとの間には通信があり、私はdocker-compose
を使用してすべてのコンテナ(この場合はアプリとRabbitMQサーバー)を持ち込みます。ドッキングされたRabbitMQをどのように構造化すればよいですか?
あり、トピックの周りの議論の多くは、一つの容器が一つだけプロセスを生成する必要があるということです、そしてDocker best practicesはこの点ややあいまいです:
このマントラは善意を持っていますが、それは必ずしも真実ではありませんその コンテナごとに1つのオペレーティングシステムプロセスが必要です。 では、コンテナがinit プロセスで生成されるという事実に加えて、いくつかのプログラムでは、独自のプロセスである の追加プロセスが生成されることがあります。
各RabbitMQコンシューマに対して別々のDockerコンテナを作成することは理にかなっていますか?それは、 "正しい"と "きれいな"気がして、キューを処理するために使用される言語/ツールをrabbitmqサーバに知らせないようにします。私はnohup
を使用してrabbitmq_consumer
コンテナまたはバックグラウンドでそれらを実行している他のいくつかの方法で、いくつかの消費者を実行することができ
app :
# my php-fpm app container
rabbitmq_server:
container_name: sf.rabbitmq_server
build: .docker/rabbitmq
ports:
- "15672:15672"
- "5672:5672"
networks:
- app_network
rabbitmq_consumer:
container_name: sf.rabbit_consumer
extends: app
depends_on:
- rabbitmq_server
working_dir: /app
command: "php bin/console rabbitmq:consumer test"
networks:
- app_network
:私は(docker-compose.yml
の関連部分)を思い付きました。
私は私の質問があると思います。毎回
私は(ansibleのように、など)ドッカーの「ビルドスクリプト」を編集する必要がないように、私は何とか、「新しい消費者を追加」を自動化することができます新しい消費者がコードから追加されますか?
RabbitMQサーバーをコンシューマーから分離することは理にかなっていますか、またはラビットサーバーをバックグラウンドで実行しているラビットサーバーを使用する必要がありますか?
または、それらをアプリコンテナの背景に配置する必要がありますか?
あなたの洞察と要点をありがとうございます。追加のキューを処理できるプロセスマネージャコンテナを持つことは、多くのことを解決して分離する素晴らしいアイデアです。そして、やはり、PHPは長時間実行されるプロセスを扱うのにはちょっと辛いです。私は実際にはいくつかの選択肢を試してみたいと思っています。おそらくいくつかのpythonやsmthに取り組んでいます。 – reafle