我正在尝试使用Docker将我们的单片PHP Symfony应用程序迁移到更具可扩展性的解决方案.应用程序和RabbitMQ之间有一些通信,我docker-compose用来启动所有容器,在这种情况下是app和RabbitMQ服务器.
围绕该主题进行了大量讨论,一个容器应该只生成一个进程,而Docker最佳实践在这一点上有些模糊:
虽然这个口头禅具有良好的意图,但每个容器应该只有一个操作系统进程并不一定正确.除了现在可以使用init进程生成容器这一事实之外,某些程序可能会自行生成其他进程.
为每个RabbitMQ使用者创建一个单独的Docker容器是否有意义?不让rabbitmq服务器知道用于处理队列的语言/工具,感觉"正确"和"干净".我提出了(相关部分docker-compose.yml):
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
Run Code Online (Sandbox Code Playgroud)
我可以在rabbitmq_consumer容器中使用nohup或在后台运行它们的其他方式运行多个使用者.
我想我的问题是:
我可以以某种方式自动化"添加新的消费者",这样每次从代码中添加新的消费者时,我都不必编辑Docker的"构建脚本"(以及其他的,如ansible)吗?
将RabbitMQ服务器与消费者分开是否有意义,或者我应该将Rabbit服务器与在后台运行的消费者一起使用?
或者它们应该放在app容器的背景中?