Ruby on Rails(Rails+MySQL)をdockerで動かしてみる

Ruby

最近、触り始めているRubyonRailsをdocker,awsと合わせて勉強していきたいと思っている今日この頃でございます。まず今回は、railsをdocker環境で動かすための、docker+rails環境構築を記事にしていきます。

【構成】
Ruby 2.5.1
Rails 5.2.1
MySQL 5.7

 

プロジェクトディレクトリを作成

この記事では、rails_dockerプロジェクトを作成します

$ mkdir rails_docker

 

Dockerfileを作成

 

$ cd rails_docker
$ mkdir Dockerfile
$ vi Dockerfile
FROM ruby:2.5.1

# RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejsを実行
RUN apt-get update -qq
RUN apt-get install -y build-essential
RUN apt-get install -y libpq-dev
RUN apt-get install -y nodejs

# ワークディレクトリの設定
RUN mkdir /myapp
WORKDIR /myapp

# gemfileを追加する
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock

# gemfileのinstall
RUN bundle install
ADD . /myapp

 

Gemfile, Gemfile.lockの作成

$ touch Gemfile
$ vi Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.1'

次に空のGemfile.lockを作成

$ touch Gemfile.lock

 

docker-compose.ymlの作成

$ touch docker-compose.yml
$ vi docker-compose.yml
version: '3'
services:
  db:
   image: mysql:5.7
   environment:
     MYSQL_ROOT_PASSWORD: root
  web:
   build: .
   command: bundle exec rails s -p 3000 -b '0.0.0.0'
   volumes:
     - .:/myapp
   ports:
     - "3000:3000"
   links:
     - db

・version
Composeファイルのバージョンを指定できます。

・image
ベースイメージを指定します。

・volumes
ホストマシンとDockerコンテナ内のファイルをSyncする。
[ホストのパス]:[Dockerコンテナ内のパス]

・ports
ホスト側とコンテナ側の両方のポートを指定できます。(ホスト:コンテナ)
コンテナポートのみを指定した場合は、ホスト側のポートはランダムで指定されます。

 

rails newでプロジェクトを作成

docker-compose runコマンドでwebコンテナの中でrails newコマンドを実行します。
ここでdatabaseにMySQLを指定します。

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

 

config/database.ymlの編集

default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: root # docker-compose.ymlのMYSQL_ROOT_PASSWORD
host: db # docker-compose.ymlのサービス名

 

起動

# コンテナをビルド
$ docker-compose build
# コンテナの一斉起動
$ docker-compose up

「Completed 200 OK」がでたらコンテナが立ち上がったのでOK。Ctrl+Cをおすと止まってしまうので、次のコマンドは違うコンソールを立ち上げてコマンドを実行していきます。

 

DB作成

$ docker-compose run web rails db:create

 

動作確認

以下にアクセスして動作確認
http://localhost:3000/

 

コメント