Railsの環境をDockerで作る。完全に自分のためのメモ。
Docker Community Edition for Mac
安定版のStableをインストール。
コレだけ。
Docker Composeがインストールされているか確認。Docker Community Edition for Macにデフォルトではいっている。
$ docker-compose -v
docker-compose version 1.22.0, build f46880f
Docker Composeは開発環境や自動テストの環境でよく使われる。まとめて色々やってくれる。
$ mkdir rails
$ cd rails
rails実行環境用のイメージビルド。
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
source 'https://rubygems.org'
gem 'rails', '5.2.0'
データベースはpostgresql
を使用。
portは3000。
volumesでデータの永続化を行う。コレをしないとサーバーを立ち上げるたびにデータが消える。
version: '3'
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
ここまでの作業が終わったら、こんな感じになっていると思います。
docker-composeを使ってrailsのプロジェクトを作成。
カレントディレクトリ配下で作成する場合はrails new .
--force
はファイルが存在する場合には上書きされる。
rails$ docker-compose run web rails new . --force --database=postgresql
rails newが終われば、いつも見慣れたヤツの出来上がり。
postgresqlが0.18だと警告が出るので書き換える。
Gemfile
gem 'pg', '>= 0.20', '< 2.0'
gemを更新したらbundle install
ではなく、docker-compose build
rails$ docker-compose build
config/database.yml
を以下のようにする。
<!-- config/database.yml -->
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password:
デタッチド・モードで起動
rails$ docker-compose up -d
データベースの作成
rails$ docker-compose run web rails db:create
コレで完成。
現在起動しているコンテナを停止させたい場合は
rails$ docker-compose stop