DockerでRailsの環境を作る

Contents

Railsの環境をDockerで作る。完全に自分のためのメモ。

設定

Docker Community Edition for Mac

安定版のStableをインストール。

Docker Hubのアカウントを作成。

コレだけ。





Docker Compose

Docker Composeがインストールされているか確認。Docker Community Edition for Macにデフォルトではいっている。

$ docker-compose -v
docker-compose version 1.22.0, build f46880f

Docker Composeは開発環境や自動テストの環境でよく使われる。まとめて色々やってくれる。

  • DockerfileかDocker Hubを用意

  • docker-compose.ymlを定義

  • docker-compose upを実行 -dでデタッチモードで起動させる





Railsの環境をつくる

作業ディレクトリをつくる

$ mkdir rails
$ cd rails

Dockerfileを作成

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

Gemfileを作成

source 'https://rubygems.org'
gem 'rails', '5.2.0'

空のGemfile.lockを作成

docker-compose.ymlを作成

データベースは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でRailsの環境を作る



railsのプロジェクトを作成

docker-composeを使ってrailsのプロジェクトを作成。

カレントディレクトリ配下で作成する場合はrails new .

--forceはファイルが存在する場合には上書きされる。

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

rails newが終われば、いつも見慣れたヤツの出来上がり。

DockerでRailsの環境を作る



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

コレで完成。

ローカルホストの3000にアクセス

DockerでRailsの環境を作る



現在起動しているコンテナを停止させたい場合は

rails$ docker-compose stop





See Also