28
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerを使ってRuby on Rails環境の構築をしてみる

Last updated at Posted at 2018-04-08

仕事でdockerを使って開発環境を構築していたので、試しに自身のPCに環境を作ってみた。

(環境)

Mac(Sierra 10.12.6)

(参考)

https://docs.docker.com/compose/rails/#define-the-project
に沿って実施。

1.Docker for Macのインストール

2.Rails / PostgreSQLアプリケーションを設定

Docker Composeを使用してRails / PostgreSQLアプリケーションを設定する。

2-1.プロジェクト定義

開発していくディレクトリにアプリケーションを構築するために必要な4つのファイルを設定する。(viコマンドが使えるなら、そちらから作成すると楽かも)
・dockerfile
・Gemfile
・Gemfile.lock
・docker-compose.yml

*今回はPC内のUserフォルダ配下に作成
*プロジェクト名をmyappとして設定

dockerfile
FROM ruby:2.4.1

ENV LANG C.UTF-8
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
COPY . /myapp
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
Gemfile.lock(空のファイル)

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/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

2-2.プロジェクトの構築

作成した4つのファイルを利用してdocker-compose runを実行し、アプリケーションを生成する。(ターミナルを使って実施)

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

ざっくりだが、以下のことを行なっている。
・dockerfileに記載の内容を見て、必要な情報(ライブラリ)を取り込む
・Rails newする
・bundle installする

アプリケーション生成後は、以下を実施する。

docker-compose build

2-3.データベースの設定と作成

データベースの情報を設定するために、config/database.ymlを変更し、コマンドでDBを作成する。

config/database.yml(設定箇所のみ抜粋)
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

データベースを作成する

docker-compose run web rake db:create

作成が成功すると、以下のコマンドが表示される。

myapp "User"$ docker-compose run web rake db:create
Starting appname_db_1 ... 
Starting appname_db_1 ... done
Created database 'myapp_development'
Created database 'myapp_test'
MACuser-no-MacBook-Air-2:myapp

2-4.dockerを起動

dockerを起動し、ローカル環境のページにアクセスする。

docker-compose up

実行すると以下のコマンドが表示される。

appname_db_1 is up-to-date
Starting appname_web_1 ... 
Starting appname_web_1 ... done
:
:
web_1  | => Rails 5.1.1 application starting in development on http://0.0.0.0:3000
web_1  | => Run `rails server -h` for more startup options
web_1  | Puma starting in single mode...
web_1  | * Version 3.11.3 (ruby 2.4.1-p111), codename: Love Song
web_1  | * Min threads: 5, max threads: 5
web_1  | * Environment: development
web_1  | * Listening on tcp://0.0.0.0:3000
web_1  | Use Ctrl-C to stop

**http://localhost:3000**にアクセスして、ようこそページが表示されれば、構築完了。
スクリーンショット 2018-04-08 23.13.43.png

その他(アプリケーションの停止)

アプリケーションの停止はプロジェクトディレクトリでdocker-compose downを実行する。

・別のターミナルウィンドウを表示し、プロジェクトディレクトリから実施

myapp "User"$ docker-compose down
Stopping appname_web_1 ... done
Stopping appname_db_1  ... done
Removing appname_web_1 ... done
Removing appname_db_1  ... done
Removing network appname_default
myapp "User"$

・downするともう一つのターミナル(docker-compose upした側)も停止の実行結果が表示される

web_1  | - Gracefully stopping, waiting for requests to finish
web_1  | === puma shutdown: 2018-XX-XX XX:XX:XX +0000 ===
web_1  | - Goodbye!
web_1  | Exiting
appname_web_1 exited with code 1
db_1   | 2018-XX-XX XX:XX:XX.XXX UTC [1] LOG:  received smart shutdown request
db_1   | 2018-XX-XX XX:XX:XX.XXX UTC [1] LOG:  worker process: logical replication launcher (PID 64) exited with exit code 1
db_1   | 2018-XX-XX XX:XX:XX.XXX UTC [59] LOG:  shutting down
db_1   | 2018-XX-XX XX:XX:XX.XXX UTC [1] LOG:  database system is shut down
appname_db_1 exited with code 0
myapp  "User"$ 

28
20
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
28
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?