multi-stage buildでRails pluginでもspringを使う

雰囲気のメモ。

https://github.com/jonleighton/spring-docker-example みたいな感じでDocker上で http://blog.daich.org/2015/12/18/rails-engine/ みたいな感じでRails pluginを使って管理画面を作っているときに、admin/のなかでもspringサーバを使うためのメモ。

Dockerfile

FROM ruby:latest AS service
:
WORKDIR /app

FROM service AS admin
:
WORKDIR /app/admin

docker-compose.yml

version: '3.4'
services:
  web:
    build:
      target: service
    volumes:
      - .:/app
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"

  spring:
    build:
      target: service
    volumes:
      - .:/app
    command: spring server
    pid: host
  
  admin
    build:
      target: admin
    volumes:
      - .:/app
    command: spring server
    pid: host

admin/config/spring.rb

Spring.application_root = File.expand_path("../../..", __FILE__)

これで

docker-compose exec admin bundle exec spring rails g model foo

みたいなことができる。