LoginSignup
9

More than 3 years have passed since last update.

docker-composeでRails5.2開発環境

Last updated at Posted at 2020-02-11

あちこちで解説されているdocker(compose)でRails5.2(+PostgreSQL)のサーバを立ち上げる方法です。Docker Desktopを予めインストールしておいてください(docker-composeは含まれています)。

今更な感じもありますし、これが正解ではないと思いますが、公式の手順を参考に可能な限りコマンドをシンプルにしてみました。運用していく上で結局元に戻す(コマンドを足す)可能性もありますが、まず起動して動かしてみるために公式の手順は色々やりすぎている気がしたので、極力絞った構成にしています。

(6系はyarnとwebpacker周りが複雑でまだ敬遠していますが…一応やってみました -> 記事

インストール

まず必要なファイルは2つだけです。

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
  web:
    build:
      context: .
      dockerfile: docker-web
    command: "rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/railsapp
    ports:
      - "3000:3000"
    depends_on:
      - db
docker-web
FROM ruby:2.6.6

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN gem install rails -v "~> 5.2" -N

RUN mkdir /railsapp
WORKDIR /railsapp
COPY . /railsapp
# 後で有効化
# RUN bundle install  

上記2つのファイルを置いたディレクトリで新規プロジェクトを作成します。

docker-compose run web rails new . --database=postgresql

少し時間がかかりますが、rails関連の新しいファイルが生成されています。

Screen Shot 2020-08-07 at 22.38.12.png

Docker環境ではデータベースはlocalhostには存在しないため、composerで作った db に接続するよう設定を変更します。

railsapp/config/database.yml
host: db
username: postgres
password: secret

次に Dockerfile の RUN bundle install の行を有効にし(コメントを外し)、buildを実行します。

docker-compose build
docker-compose up

ここまでで、Webサーバが立ち上がった状態になっていますが、データベースの初期化が必要です。別のターミナルを立ち上げて以下を実行します(execはコンテナが立ち上がった(=upされた)状態でコマンドを実行するサブコマンドです)。

docker-compose exec web rails db:create

ここまで実行したらブラウザで「localhost:3000」にアクセスするとRailsの最初のページが見えているはずです。

Screen Shot 2020-02-11 at 21.25.28.png

同じ要領で、scaffoldを作成したり、ここからはいつものrailsのノリで作業が出来そうです(先頭のdocker-compose exec webを外すと普通のRailsコマンドです)。

docker-compose exec web rails g scaffold post title:string body:text published:boolean
docker-compose exec web rails db:migrate

Screen Shot 2020-02-11 at 21.34.54.png

補足1

デフォルトのGemfileは、bundle install後に色々警告が出てしまいます。警告の内容に従って新しいgemに差し替えています。

Gemfile
# gem 'sass-rails', '~> 5.0'
# ↓ 変更
gem 'sassc-rails'

# gem 'chromedriver-helper'
# ↓ 変更
gem 'webdrivers'

開発がDocker(linux)ならWindowsのお世話になることはありませんので、以下は削除してしまいます。参考記事

# 削除
# gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

rubyの2.7を使いたかったのですが、Pumaの起動時に警告が大量に出るため、2.6を使用しています。

/usr/local/bundle/gems/activemodel-5.2.4.1/lib/active_model/translation.rb:67: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

補足2

dockerは"軽量"と言われていますが、何回も試していると意外とディスクを圧迫してきます。時々不要なものは削除すると良いでしょう。以下は開発環境でがさっと削除する場合の例です。

$ docker ps -a | awk '{print $1}' | xargs docker rm
$ docker images | grep none | awk '{print $3}' | xargs docker rmi

2020.08.12追記
以下のコマンドも役に立ちます 参考記事

docker system prune

補足3

元々は、railsプロジェクトはrailsappサブディレクトリに収める作りにしていたのですが、heroku+githubの連携と相性が悪かったため、プロジェクト直下に配置するように調整しています。

関連記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
9