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

Docker for Macを使ってRuby on Rails環境を構築する

More than 3 years have passed since last update.

概要

Ruby on Railsの開発環境をDockerを使って簡単に構築したい。

Docker for Macのインストール

https://docs.docker.com/docker-for-mac/install/
からGet Docker for Mac [Stable]を選択しダウンロード、インストール。

Ruby on Rails + PostgreSQLのアプリを動かす

https://docs.docker.com/compose/rails/
に従う。

プロジェクトの構成を定義

適当なプロジェクトフォルダを作ってその中にファイルを4つ作る。

Dockerfile
FROM ruby:2.4.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
Gemfile
source 'https://rubygems.org' 
gem 'rails', '5.1.1'

空のGemfile.lockを作る。

Gemfile.lock
docker-compose.yml
version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

プロジェクトをビルド

ターミナルでプロジェクトフォルダに行き、以下を実行。

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

Railsのファイルがずらっと生成される。次に以下を実行。

docker-compose build

データベースの設定

config/database.ymldevelopment:の部分を以下のように変更。

config/database.yml
development: &default
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: postgres
  password:
  host: db

そしてデータベースを作成。

docker-compose run web rake db:create

起動

docker-compose up

http://localhost:3000
にアクセスしてみる。Yay! You’re on Rails!と表示されれば成功。

終了

Ctrl+Cで終了してしまうと次にdocker-compose upで起動しようとしたときにエラーで起動できなくなることがある。tmp/pids/server.pidが残ってしまっているのが原因なので、

rm tmp/pids/server.pid

で削除してから再びdocker-compose.upすればいい。ただ、毎回これをやるのは面倒なので、もう一つターミナルを立ち上げ、

docker-compose down

で終了すれば余計なファイルが残ったりせず、正常に終了できる。

DBの永続化

このままだとデータベースが終了するたび毎回消えてしまうので、docker-compose.ymlを以下のように修正する。

docker-compose.yml
version: '3'
services:
  db:
    restart: always
    image: postgres
    volumes:
      - sql-data:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  sql-data:
    driver: local
rock619
「ご年齢に応じたご経験、スキルが不足されているようです」
https://rock619.com
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
ユーザーは見つかりませんでした