仕事で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として設定
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
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
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を作成する。
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**にアクセスして、ようこそページが表示されれば、構築完了。
その他(アプリケーションの停止)
アプリケーションの停止はプロジェクトディレクトリで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"$