はじめに
本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
DockerでRailsの開発環境を構築する方法
必要なファイルを作成
以下のコマンドを実行し、必要なファイルを用意します。
ターミナル
$ touch Dockerfile
ターミナル
$ touch docker-compose.yml
ターミナル
$ mkdir src
ターミナル
$ cd mkdir
ターミナル
$ touch Gemfile
作成したファイルの中身を記述
FROM ruby:3.1.1
# yarnとnode.jsをインストールするための記述
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
# ./srcを/appにコピー
COPY ./src /app
# ライブラリのインストール先を指定してbundle install
RUN bundle config --local set path 'vender/bundle' \
&& bundle install
docker-compose.yml
version: '3.9'
services:
db:
# M1Macを使用している場合には記述が必要。記述しないと docker: no matching manifest for linux/arm64/v8 in the manifest list entries. というエラーが発生。
platform: linux/x86_64
image: mysql:8.0.28
# mysql8.0の認証形式に関する設定
command: --default-authentication-plugin=mysql_native_password
# コンテナを再度起動した際にデータを入れ直すことを防止
volumes:
- ./src/db/mysql_data:/var/lib/mysql
# mysqlはパスワードを設定していないとエラーになるため以下は設定必須
environment:
MYSQL_ROOT_PASSWORD: password
web:
# イメージとしてカレントディレクトリ内のDockerfileを参照
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
# ./src以下を/app以下に同期
volumes:
- ./src:/app
ports:
- "3000:3000"
# 依存関係。webはdbに依存しているの意。railsからmysqlに接続する際にDBのIPアドレスを直接記述するが、以下を記述することで当該箇所にdbと記述すればよくなる。
depends_on:
- db
source 'https://rubygems.org'
gem 'rails', '~> 7.0.0'
ターミナルでコマンドを実行する
ターミナル
$ docker-compose run web rails new . --force --database=mysql
再度イメージをbuild
する
Gemfileに変更が加わっていますので、再度イメージをbuild
します。
ターミナル
$ docker-compose build
database.ymlを修正
database.ymlを修正してデータベースの設定を行います。
以下のpasswordとhostをdocker-compose.ymlの記述を確認して修正します。
config/database.yml
:
:
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # docker-compose.ymlで設定したpasswordを記述
host: db # docker-compose.ymlのdepends_onで設定した値を記述
:
:
データベースを作成する
ターミナル
$ docker-compose run web rails db:create
コンテナを作成し、起動する
ターミナル
$ docker-compose up
ブラウザで確認する
http://localhost:3000/ にアクセスし、Railsの初期画面が表示されるか確認します。