はじめに
ポートフォリオ作成のため、Dockerにて環境構築を行いました。
その時の流れと、ファイルの意味について調べたことを記録しました。
初学者のため、間違えていたら申し訳ありません。
環境
PC: mac(Apple M1)
Ruby: 3.1.4
Rails: 7.0.8
作業内容
① ディレクトリ下にファイルを作成する
ディレクトリ
好きなディレクトリ名/
├── Dockerfile
├── docker-compose.yml
├── entrypoint.sh
├── Gemfile
└── Gemfile.lock
ファイル一括作成コマンド
touch Dockerfile docker-compose.yml Gemfile Gemfile.lock entrypoint.sh
② ファイルの中身を記述する
ファイルの中身
Dockerfile
FROM ruby:3.1.4 # rubyのバージョンを指定
RUN mkdir /app # コンテナ内にappディレクトリを作成
WORKDIR /app # 作成したappディレクトリを作業用ディレクトリとして設定
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock # ローカルの Gemfile と Gemfile.lock をコンテナ内のapp配下にコピー
RUN bundle install # コンテナ内にコピーした Gemfile の bundle install
COPY . /app # ローカルのディレクトリ配下のファイルをコンテナ内のapp配下にコピー
COPY entrypoint.sh /usr/bin/ # ローカルのentrypoint.shを/usr/bin配下にコピー
RUN chmod +x /usr/bin/entrypoint.sh # ファイル所有者にentrypoint.shの実行権限を付与
ENTRYPOINT ["entrypoint.sh"] # コンテナ起動時にentrypoint.shを実行するように設定
EXPOSE 3000 # ポート番号を指定
CMD ["rails", "server", "-b", "0.0.0.0"] # イメージの実行時に実行するメインプロセスを構成する
docker-compose.yml
services:
db:
image: mysql/mysql-server:latest # 使用するimageを指定
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_ROOT_HOST: '%' # 環境変数を設定
ports:
- "3306:3306" # ポート番号を指定
volumes:
- db-volume:/var/lib/mysql # データを永続化
web:
build: . # Dockerfileの場所を指定
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" # rails server が起動していた場合は停止し、サーバーを起動
volumes:
- .:/app # ローカル側のディレクトリ配下とコンテナ側のapp配下を同期
ports:
- "3000:3000" # ポートの指定
depends_on:
- db # MySQLのコンテナが起動してからRailsのコンテナを起動する
volumes:
db-volume: # Docker Composeにボリュームを作成するように指示
entrypoint.sh
#!/bin/bash # bashを利用したシェルスクリプトであることを示す
set -e #エラーが出たらスクリプトを中断
rm -f /myapp/tmp/pids/server.pid # pidファイルが既に存在するためサーバーが立ち上がらないエラーを回避するため、server.pidファイルが既にあった場合、それを削除
exec "$@" # DockerfileのCMDの部分に書いてあるコマンドを実行する
Gemfile
source 'https://rubygems.org'
gem 'rails', '~>7.0.8'
③ rails new を実行
docker-compose run web rails new . --force --database=mysql --skip-bundle
④ docker-compose build を実行
docker-compose build
⑤ database.yml を編集
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
# 以下2行を編集
password: pass
host: db
⑥ データベースを作成
docker-compose exec web rails db:create
⑦ コンテナを起動する
docker compose up
http://localhost:3000 にアクセスし、Railsアプリが起動していることを確認する。