Docker上でRuby + Rails + MySQLの開発環境を構築する


はじめに

Docker上にRailsの開発環境を構築したのでメモとして残しておく。


前提

Dockerがインストール済みであること。

・Docker for Windows

https://www.docker.com/docker-windows

・Docker for Mac

https://docs.docker.com/docker-for-mac/install/


ルートディレクトリの作成

$ mkdir myapp


dockerfileの作成

FROM ruby:2.6.3

ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /my_app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME


Gemfileの作成

source 'https://rubygems.org'

gem 'rails', '5.2.3'


空のGemfile.lockを作成

$ touch Gemfile.lock


docker-compose.ymlの作成


docker-compose.yml

version: '3'

services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/my_app
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:5.7
volumes:
- .mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password


rails newの実行

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

rails newでアプリケーションのひな形となるディレクトリやファイルが自動生成される。

後で再度ビルドを行う必要がある為、--skip-bundleでビルドをスキップする。


Gemfileの編集

gem 'mini_racer', platforms: :ruby

mini_racerのコメントをはずす


buildの実行

$ docker-compose build


database.ymlの編集


database.yml

default: &default

adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db

configフォルダ配下にあるdatabase.ymlの以下のように編集

・password

  docker-compose.ymlのMYSQL_ROOT_PASSWORDの値にする。

・host

  docker-compose.ymlのdepends_onの値にする。


コンテナを起動

$ docker-compose up -d

後で起動中のコンテナに入りrailsコマンドを実行する為、-dでバックグラウンドで実行しておく。


modelの作成

起動中のコンテナの一覧を確認する。

$ docker ps

以下の様に一覧が表示される。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

c27856156df0 my_app_web "bundle exec rails s…" 5 seconds ago Up 4 seconds 0.0.0.0:3000->3000/tcp my_app_web_1
f3c12d1b91be mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp, 33060/tcp my_app_db_1

docker execでRailsアプリのコンテナに入る。

$ docker exec -it my_app_web_1 sh

modelを作成する為にrailsコマンドを実行する。

$ rails db:create


localhost:3000に接続する

welcom_rails.PNG

無事に開発環境が構築されました。:clap: