Skip to content

Instantly share code, notes, and snippets.

@YutaGoto
Last active May 12, 2017 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YutaGoto/e1d7beac11cdcabfb69a225a718751b8 to your computer and use it in GitHub Desktop.
Save YutaGoto/e1d7beac11cdcabfb69a225a718751b8 to your computer and use it in GitHub Desktop.

DockerでRailsプロジェクトを作ってみたの会

どうもこんにちは、ごっちです。

windowsでmastodonを動かしてみようとした話 でやろうと思っていたDockerの勉強。ようやく着手。

今回はRailsプロジェクトをNewするところからやってみようと思ったのです。

公式の QuickStart を参考に進めていきますよ。

ディレクトリの用意

プロジェクト用のディレクトリを用意します。今回のプロジェクト名は /myapp とします。 myapp ディレクトリを作ります。

Dockerfile

Dockerfile を用意します。今回は ruby 2.4.1 を使おうと思います。

コマンドか何かで Dockerfile ファイル作って、以下を記述します。

FROM ruby:2.3.3
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
ADD . /myapp

Gemfile

Gemfile を用意します。その中で Rails のバージョンも指定しますよ。

コマンドか何かで Gemfile ファイルを作って、以下を記述します。

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

Rails 5.1.0 を使おうと思います。ついてに Gemfile.lock ファイルもコマンドか何かで作っておきます。

docker-compose.yml

docker-compose.yml を用意します。 もろもろ設定やコマンドを記述します。

コマンドか何かで 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 new でRailsプロジェクトを一気に作ります。

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

今回はPostgreSQLを使用します。んで、もろもろ処理が終わると さっき作った Gemfile の中身も充実したかと思います。

database.yml

config/database.yml でDB設定をします。

なにも変なことをしていなければ、以下の書き方で動くと思います。

default: &default
  adapter: postgresql
  encoding: utf8
  charset: utf8
  timeout: 5000
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development
  username: postgres
  password:
  host: db
####

test, production 環境で使用する場合はそれに応じた設定をします。

docker-compose build

ビルドします

$ docker-compose build

上記コマンドは、 Gemfile を書き換えるたびにする必要があります。

Railsサーバの起動

以下のコマンドでRailsサーバの起動をします。

$ docker-compose up
myapp_db_1 is up-to-date
myapp_web_1 is up-to-date
Attaching to myapp_db_1, myapp_web_1
web_1  | => Booting Puma
web_1  | => Rails 5.1.0 application starting in development on http://0.0.0.0:3000
web_1  | => Run `rails server -h` for more startup options
...

こんな感じで動いていそうであれば成功です。

DBの作成

今の状態ではテーブルは何もないけれども、作っておきます。

$ docker-compose run web rake db:create

さて、もろもろセットアップが終わったところでブラウザでの確認をします。

http://localhost:3000 にアクセスします。

rails

こんな感じに表示されれば成功です!やりました!!うれしい!

困ったこと

windowsでmastodonを動かしてみようとした話 の残骸が残っていたので、 docker-compose up するときに衝突してしまってあら大変。

Dockerイメージとコンテナの削除方法 を参考にMastodonのコンテナとイメージを削除しました。

マシンが若干暴走して再起動が走ってしまってログが残っていない。悲しい

docker ps -a でコンテナを確認して、 docker rm [コンテナID] で該当のコンテナを削除します。

docker images でDockerイメージを確認して、 docker rmi [イメージID] でDockerイメージを削除します。

References

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment