我如何可以在不同的容器泊坞窗中分离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