簡體   English   中英

我如何隔離不同容器中的Rails API和Rails worker工作

[英]How can i isolate Rails API and Rails workers job in diffrent containers docker

我正在計划對現有的Rails項目進行dockerize。

我的項目有一個API控制器和一個工作程序,可在后台運行作業

有沒有一種方法可以使用Docker容器將我的應用分為三部分:

例如:

  • 一個容器的應用程序
  • 一個用於運行Rails作業的容器
  • Rails API的一個容器

我知道我可以為應用程序使用一個容器,而對數據庫使用另一個容器,但是我的問題是關於隔離應用程序。

通常,您的作業將保存到后端,例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM