1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerで環境構築(Rails7+mysql)

Last updated at Posted at 2024-03-11

はじめに

 ポートフォリオ作成のため、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アプリが起動していることを確認する。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?