今回、下記の動画を参考にしつつRailsチュートリアルのプロダクトをDocker化させてみました。
Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース
https://www.youtube.com/watch?v=lZD1MIHwMBY&t=3538s
railsチュートリアルではデフォルトではpostgresqlが選択されていますが、IT企業で採用されているデータベースはMysqlが一番多いという話を聞いたので変更してみます(上記紹介動画でもmysqlが紹介されております。mysql8系で紹介されておりますが、herokuの無料プランが5系のみとの事なので5系でDBを設定します。)
ただ、M1のMacの場合はDockerでMysqlは、サポートされていないのでMariaDBにした方が良いです。(私はintelのMacとM1のMacを持っているので今回は試験的にmysqlにしてますが、恐らくこの先、新しくプロダクトを作る場合mysqlを選択するならMariaDBを選択するって言うのが主流になっていくのでは無いかと思われます。)
作業ディレクトリの作成
作業ディレクトリを作成し、そのディレクトリへ移動します。
自由に名前を決めてください。(筆者の場合はrails_dockerとしました)
$_は作成したdirにcdするコマンドです。
$ mkdir rails_docker && cd $_
Gitの初期化
最初にGitの初期化を行います。下記からは作成したrails_dockerディレクトリをrootとします。
root $ git init
rootディレクトリに各ファイルを作成します
sample_appディレクトリとDockerfileとdocker-compose.ymlファイル。sample_appの下の階層にGemfileを作成
root $ mkdir sample_app && touch {$_/Gemfile,Dockerfile,docker-compose.yml}
各ファイルを編集します。
Gemfile
source 'https://rubygems.org'
gem 'rails', '6.0.3'
Dockerfile
FROM ruby:2.7.4
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update -qq \
&& apt-get install -y nodejs yarn
WORKDIR /app
COPY ./sample_app /app
RUN bundle config --local set path 'vendor/bundle' \
&& bundle install
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- ./sample_app/db/mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- ./sample_app:/app
ports:
- "3000:3000"
environment:
RAILS_ENV: development
depends_on:
- db
上記のように設定します。
Dockerをbuildする。
root $ docker-compose build
rootディレクトリでrails newする。
root $ docker-compose run web rails new . --force --database=mysql
rails newされたら
再度imegeをbuildする
root $ docker-compose build
上記操作でrailsの雛形が完成。
DBの設定をする。
[sample_app/config/database.yml]
passwordにpasswordと入れるのとhost(dbの接続先)をdbに変更する。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password #追加
host: db #追加
設定が完了したらDBを下記コマンドで作成
root $ docker-compose run web rails db:create
DBの作成が完了した。
下記コマンドでコンテナを立ち上げると問題なく動作します。
root $ docker-compose up
###感想
本番環境のデプロイ方法は参照動画でも紹介して下さっておりますがrailsチュートリアルを進めていくと、ローカル環境では問題ないのにheroku側ではApplication errorになってしまいます。heroku logs --tailコマンドでログを辿り、色々やったら直りましたが、無料枠でherokuを本番環境にする場合には、mysqlよりpostgresqlが一番フィットするのかもなって印象を受けました。