Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

モチベーション

前回触った時(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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした