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

(環境)

Mac(Sierra 10.12.6)

(参考)

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

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

https://docs.docker.com/compose/install/

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"$ 

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.