[英]How can i isolate Rails API and Rails workers job in diffrent containers docker
我正在计划对现有的Rails项目进行dockerize。
我的项目有一个API控制器和一个工作程序,可在后台运行作业
有没有一种方法可以使用Docker容器将我的应用分为三部分:
例如:
我知道我可以为应用程序使用一个容器,而对数据库使用另一个容器,但是我的问题是关于隔离应用程序。
通常,您的作业将保存到后端,例如Redis用于Sidekiq,一些sql数据库用于delay_jobs。 作业的实际执行可以放在其他位置。
在Web服务器的Dockerfile中,您可能具有如下所示的入口点(示例):
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
这仅运行Web服务器。 坦白地说,我认为您所讨论的“应用程序”和API应该在同一容器中运行。
为了执行作业,可以使用相同的图像,但是定义不同的入口点。 (查看docker-compose ,非常方便)
在那儿,您会要求它..例如启动一些工作程序,而该命令将取决于您选择使用哪个后台处理gem。 您还需要将存储作业的数据库的配置传递给它。
您可能会编写的一个示例docker-compose文件可能如下所示:
version: '2'
services:
redis:
image: 'redis:3.2-alpine'
command: redis-server
ports:
- 6379:6379
volumes:
- redis:/data
app:
depends_on:
- redis
- postgres (or some other db you have)
build: .
ports:
- 3000:3000
volumes:
- .:/app
sidekiq:
depends_on:
- redis
build: .
command: sidekiq -C config/sidekiq.yml.erb
volumes:
- .:/app
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.