DockerとRails5を試してみました
Quickstart: Compose and Rails
をベースに行いました
dockerやdocker-composeはインストール済み、Ubuntu 14.04上で行いました
Dockerfileを用意
$ vim Dockerfile
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install -j4
ADD . /myapp
Gemfileを用意します
$ vim Gemfile
source "https://rubygems.org"
gem 'rails', '>= 5.0.0.beta4', '< 5.1'
Quickstartの手順通り、Gemfile.lockを用意
$ touch Gemfile.lock
docker-compose.ymlを用意
$ vim docker-compose.yml
version: '2'
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
rails newしてrailsアプリを作っておりきます
$ docker-compose run web rails new . –force –database=postgresql –skip-bundle
railsアプリのファイル権限がrootになっているので、権限を変えます
$ sudo chown -R $USER:$USER .
javascriptランタイムのために、therubyracerのコメントアウト状態を解除
$ vim Gemfile
gem 'therubyracer', platforms: :ruby
railsのデータベース設定を用意
$ config/database.yml
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
test:
<<: *default
database: myapp_test
buildして立ち上げます
$ docker-compose build
$ docker-compose up
http://(server domain):3000 にアクセス!
rails5が立ち上がっています!
scaffoldして簡単に画面を作ってみます
$ docker-compose run web rails generate scaffold Article title:string
$ docker-compose run web rails db:migrate
$ docker-compose up
http://(server domain):3000/articles にアクセス!
できてます
このままだと docker rm でコンテナを消すとデータベースのデータが消えます
$ docker-compose run web rails db:migrate
すれば戻りますが、データベースをホスト側に保存させてみます
volumes を bind します
postgresql用のディレクトリをホスト側へ用意
$ mkdir -p datastore/postgresql
docker-compose.yml に バインドさせる設定を追記
$ vim docker-compose.yml
version: '2'
services:
db:
image: postgres
volumes:
- ./datastore/postgresql:/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
$ docker-compose build
$ docker-compose up
これでデータベースのデータもホスト側へ保存されるようになりました
ここまでくれば開発ができそうです