我如何可以在不同的容器泊坞窗中分离Rails API和Rails工作
我正在计划dockerize我现有的Rails项目。
我的项目有一个API控制器和工作人员在后台运行作业
有没有办法使用Docker容器将我的应用程序分成三部分:
例如:
- 一个容器的应用程序
- 运行Rails作业的一个容器
- 一个容器为Rails API
我知道,我可以使用一个容器的应用程序和另一个数据库,但我的问题是隔离应用程序。
通常情况下,您的工作将被保存到后端 – 例如Redis for Sidekiq,一些用于delayed_jobs的sql数据库。 工作的实际执行可以放在其他地方。
在Web服务器的Dockerfile中,可能会有这样写入的入口点(示例):
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
这只运行networking服务器。 说实话,我认为你所谈论的“应用程序”和API应该运行在同一个容器上。
为了执行作业,可以使用相同的图像,但是定义不同的入口点。 (看看docker-compose ,这真的很方便)
在那里,你会要求它启动一些工作人员,而这个命令将取决于你select的后台处理。 您还需要将作业存储在其中的数据库configuration传递给它。
您可以编写的示例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