DockerでのRuby on Rails version6 APIモード・MySQLをDBに使用してのバックエンド環境を構築しましたので記録しておきます。
アプリディレクトリ作成
※今回はmangaディレクトリとしています。
mkdir manga
ファイル作成
touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,my.cnf}
Dockerfile
FROM ruby:2.6.5
# 必要なパッケージのインストール(Rails6からWebpackerがいるので、yarnをインストールする)
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 build-essential libpq-dev nodejs yarn
# 作業ディレクトリの作成
RUN mkdir /manga
WORKDIR /manga
# ホスト側(ローカル)(左側)のGemfileを、コンテナ側(右側)のGemfileへ追加
ADD ./Gemfile /manga/Gemfile
ADD ./Gemfile.lock /manga/Gemfile.lock
# Gemfileのbundle install
RUN bundle install
ADD . /manga
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- ./data:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "3306:3306"
web:
build: .
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3001 -b '0.0.0.0'"
tty: true
stdin_open: true
depends_on:
- db
ports:
- "3001:3001"
volumes:
- .:/manga
my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6.0.3'
rails new
docker-compose run web rails new . --force --database=mysql --skip-bundle --api --webpacker
config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # docker-compose.ymlの MYSQL_ROOT_PASSWORD
host: db # docker-compose.ymlの service名
Docker起動
docker-compose build
docker-compose up -d
DB
docker exec -it <web container id> bash
rails db:create
rails db:migrate
ブラウザ確認
http://localhost:3001
または
http://0.0.0.0:3001
以上です
この手順でやれば自分の環境では他のエラー等はありませんでした。
参考サイト
こちらを参照させていただきました。もしうまくいかなかった場合はこちらも見ていただければと思います。
https://qiita.com/kurawo___D/items/53035a502f44d3b0835f
上の記事だけだとMySQL文字化けしたので、今回の記事では以下の記事の設定もマージしています。
Pingback: 無料漫画のおまとめ更新通知サービス - NormalBlog.net