LoginSignup
42
27

More than 5 years have passed since last update.

DockerでRailsのプロジェクトを立ち上げるまで

Last updated at Posted at 2017-08-22

モチベーション

前回触った時(Dockerを使ってrailsアプリケーションを開発する1)は、あんまりうまく動いてる感なかったのでもうちょっとベストプラクティスを探していた。

・docker-composeをうまいこと使ってコンテナ管理したい
・volumesを使ってビルドのたびにgem installに長時間かかってしまうのどうにかしたい
・最小限の構成でやりたい(これはまだ出来てない感)

ポイント

昔と比べて
・volumesをうまく使う
・nginxは必要ない(puma)
・unicornは必要ない(puma)
・--path vendor/bundleは必要ない(Dockerを使うので)
・app_nameは適当にしてください〜

初期構成

ファイル構成の概要

.
├── Dockerfile
├── docker-compose.yml
└── src
    ├── Gemfile
    └── Gemfile.lock

Dockerfile

FROM ruby:2.4.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
ENV BUNDLE_JOBS=4 \
    BUNDLE_PATH=/bundle \
    APP_DIR=/src/app_name/
RUN mkdir -p $APP_DIR
WORKDIR $APP_DIR
COPY src/Gemfile $APP_DIR
COPY src/Gemfile.lock $APP_DIR
RUN gem install bundler & bundle install
COPY src $APP_DIR

docker-compose.yml

docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - "80:3000"
    command: bundle exec puma
    volumes:
      - ./src:/src/app_name
      - bundle-data:/bundle
    depends_on:
      - db
  db:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  bundle-data:
  db-data:

src/Gemfile

source 'https://rubygems.org'

gem 'rails', '~> 5.1.3'

src/Gemfile.lock

src/Gemfile.lock

以上の4ファイルを準備。そして以下を実行

Rails Appの作成

$ docker-compose build
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle

rails newするとプロジェクトが生成されるので、ここでdatabase.ymlを編集

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: postgres
  host: db

development:
  <<: *default
  database: app_name_development

test:
  <<: *default
  database: app_name_test

production:
  <<: *default
  database: <%= ENV['DATABASE_NAME'] %>
  username: <%= ENV['DATABASE_USERNAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>
  host: <%= ENV['DATABASE_HOST'] %>```

ここまで出来たらbundle install

$ docker-compose run web bundle install

最後にdbを作成

$ docker-compose run web rails db:create

以上で、起動出来るようになる。

$ docker-compose up

Gemを更新した時とかは

$ docker-compose run web bundle install
42
27
1

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
  3. You can use dark theme
What you can do with signing up
42
27