LoginSignup
7
6

More than 5 years have passed since last update.

Docker for MacでRails+PostgreSQLの開発環境を作る

Last updated at Posted at 2017-05-16

はじめに

Ruby on Rails + PostgreSQLで開発する必要が生じたので、Docker for Macを使って開発環境を構築しました。
基本的には以下のリンクにある通りに実行すれば開発環境はできますが、少し問題があったので、その情報も追加しています。
Quickstart: Compose and Rails

Docker for Mac

Docker for Macをインストールしてない方は
Get started with Docker for Mac
などを参考にインストールしてください。

Ruby on Rails用Dockerfile

開発に使うdocker用のDockerfileを作成します。
まず、アプリ用のディレクトリを用意します。ここでは~/myappとします。
元になるdocker imageとして最新のrubyのイメージを使用します。Dockerfileは以下のようになります。

FROM ruby:2.4.1

ENV LANG C.UTF-8
RUN apt-get update -qq 
RUN apt-get install -y build-essential libpq-dev postgresql nodejs

RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install

ENV APP /myapp
RUN mkdir -p $APP
WORKDIR $APP
ADD . $APP

Ruby on RailsのコンテナにもpostgreSQLをインストールしておかないと、rails db:connectでデータベースに接続できないので、最初にインストールしておきます。
また、Gemfile, Gemfile.lockだけを/tmpにコピーして、bundle install しているのは、キャッシュを利用してbundleを高速化するためです。詳しくは以下を参照ください。
Docker で bundle install を爆速にする

Gemfileの作成

最初の起動用のGemfileを作成します。

source 'https://rubygems.org'
gem 'rails'

これで最新のrailsがインストールされます。また、空のGemfile.lockが必要なので、コマンドラインで、

$ touch Gemfile.lock

として作成します。
これらのファイルはrails newした時に上書きされます。

docker-compose.ymlの作成

docker-composeの設定ファイルを作成します。

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails server -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

Railsアプリケーションの生成

rails newを実行して、Railsアプリケーションを生成します。

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

生成が終われば、色々なファイルが生成されています。

$ ls -l

で確認できます。

Docker imageの作成

次のコマンドでdocker imageを作成します。

$ docker-compose build

この後、Gemfileを変更した場合は、再度イメージをビルドし直す必要があります。

データベースの設定

Ruby on Railsはいろいろなデータベースを使うことができますが、ここではPostgreSQLを使用します。
PostgreSQLへ接続するための情報をconfig/database.ymlに設定します。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: postgres
  password:
  host: db

デフォルトで用意されているユーザーはpostgresなので、ユーザー名にはこれを指定します。この後行うdb:createでは、develpmentとtestの両方のデータベースが作成されますので、defaultにユーザーなどを設定した方が今は便利です。
実際のアプリでは、データベースのユーザー設定をきちんと行い、この設定ファイルもそれに合わせて修正してください。

 アプリケーションの起動

次のコマンドでアプリケーションを起動します。

$ docker-compose up

次に、アプリを起動したまま、別のターミナルで以下のコマンドを実行してデータベースを作成します。

$ docker-compose exec web rails db:create

これでアプリケーションの設定が終わりました。Webブラウザで次のURLにアクセスすると、

http://localhost:3000/

Railsのトップページが表示されます。
Screen Shot 2017-05-08 at 15.57.30.png

7
6
0

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
7
6