【Ruby on Rails】DockerでRuby on Rails+Nginx+MySQLの環境構築をする

作成日: 更新日:

開発環境

  • Visual Studio Code:version 1.73.0
  • OS:Windows10
  • Docker Engine:v23.0.5

DockerでRuby on Rails+Nginx+MySQLの環境構築をする手順

DockerでRuby on Rails+Nginx+MySQLの環境構築をする手順について解説していきます。

ディレクトリ構成

今回のディレクトリ構成は下記を目指していきます。

1# Directory structure
2project-root/
3├── docker/
4│   ├── web/             # Rubyコンテナ(Dockerfile)
5│   ├── database/        # MySQLコンテナ(Dockerfile)
6│   └── nginx/           # Nginxコンテナ(Dockerfile + 設定ファイル)
7├── web/                 # Ruby on Railsアプリケーションを配置するディレクトリ
8└── docker-compose.yml   # Docker Composeファイル

docker-compose.ymlを作成

まずはdocker-compose.ymlを作成していきます。 ルートディレクトリの直下にdocker-compose.ymlを作成し、以下のようにしてください。

1# docker-compose.yml
2version: '3.8'
3
4services:
5  web:
6    build:
7      context: .
8      dockerfile: docker/web/Dockerfile
9    container_name: rails_web
10    ports:
11      - "3000:3000"
12    volumes:
13      - ./web:/var/www/html
14    depends_on:
15      - db

Rubyコンテナを作成

次にRubyコンテナを作成していきます。 docker/web/ディレクトリの直下にDockerfileを作成し、以下のようにしてください。

1# docker/web/Dockerfile
2FROM ruby:3.2
3
4WORKDIR /var/www/html
5
6COPY ./web /var/www/html/
7
8RUN gem install bundler && bundle install

web/ディレクトリの直下にGemfileを作成し、以下のようにしてください。

1# web/Gemfile
2source 'https://rubygems.org'
3
4gem 'rails'

web/ディレクトリの直下にGemfile.lockを作成してください。 Gemfile.lockの中身は空で問題ありません。

Ruby on Railsアプリケーションの作成

次にRuby on Railsアプリケーションの作成をしていきます。 まずは以下のコマンドでプロジェクトディレクトリに移動します。

1cd project-root

以下のコマンドでRubyコンテナをビルドします。

1docker-compose build

以下のコマンドでRuby on Railsアプリケーションを作成します。

1docker-compose run --rm web rails new . --force --database=mysql

MySQLコンテナを作成

次にMySQLコンテナを作成していきます。 docker/database/ディレクトリの直下にDockerfileを作成し、以下のようにしてください。

1# docker/database/Dockerfile
2FROM mysql:8.0

Nginxコンテナを作成

次にNginxコンテナを作成していきます。 docker/nginx/ディレクトリの直下にDockerfileを作成し、以下のようにしてください。

1# docker/nginx/Dockerfile
2FROM nginx:alpine
3COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf

docker/nginx/ディレクトリの直下にdefault.confを作成し、以下のようにしてください。

1# docker/nginx/default.conf
2server {
3    listen 80;
4    server_name localhost;
5
6    location / {
7        proxy_pass http://web:3000;
8        proxy_set_header Host $host;
9        proxy_set_header X-Real-IP $remote_addr;
10        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11    }
12}

docker-compose.ymlを修正

docker-compose.ymlを修正していきます。 ルートディレクトリの直下のdocker-compose.ymlを以下のように修正してください。

1# docker-compose.yml
2version: '3.8'
3
4services:
5  web:
6    build:
7      context: .
8      dockerfile: docker/web/Dockerfile
9+   command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -b '0.0.0.0'"
10    container_name: rails_web
11    ports:
12      - "3000:3000"
13    volumes:
14      - ./web:/var/www/html
15+     depends_on:
16+       - db
17+ 
18+   db:
19+     build:
20+       context: .
21+       dockerfile: docker/database/Dockerfile
22+     container_name: rails_db
23+     environment:
24+       MYSQL_ROOT_PASSWORD: root
25+       MYSQL_DATABASE: rails_db
26+       MYSQL_USER: rails_user
27+       MYSQL_PASSWORD: rails_password
28+     ports:
29+       - "3306:3306"
30+     volumes:
31+       - db_data:/var/lib/mysql
32+ 
33+   nginx:
34+     build:
35+       context: .
36+       dockerfile: docker/nginx/Dockerfile
37+     container_name: rails_nginx
38+     ports:
39+       - "80:80"
40+     volumes:
41+       - ./web:/var/www/html
42+       - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
43+     depends_on:
44+       - web
45+ 
46+ volumes:
47+   db_data:

Ruby on Railsアプリケーションのデータベース設定

次にRuby on Railsアプリケーションのデータベース設定をしていきます。 Ruby on Railsアプリケーションのdatabase.yml設定を以下のように修正します。

1# web/config/database.yml
2default: &default
3  adapter: mysql2
4  encoding: utf8mb4
5  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
6  username: rails_user
7  password: rails_password
8  host: db
9
10development:
11  <<: *default
12  database: rails_db
13
14test:
15  <<: *default
16  database: rails_db

Dockerコンテナをビルド

次にDockerコンテナをビルドしていきます。 まずは以下のコマンドでプロジェクトディレクトリに移動します。 ※プロジェクトディレクトリに移動済の場合はスキップしてください。

1cd project-root

以下のコマンドでDockerコンテナをビルドします。

1docker-compose build --no-cache

ブラウザでhttp://localhostにアクセスし、Ruby on Railsアプリケーションの初期画面が表示されていれば成功です。

まとめ

今回はDockerでRuby on Railsの環境構築をする手順について解説していきましたが、いかがだったでしょうか。 個人開発のみであればDockerは不要かもしれませんが、Dockerコンテナで開発環境を構築することにより、複数人でプロジェクトを進める場合でも同じ環境で開発を進めることができます。 Dockerを使った開発は必須となりつつありますので、是非、チャレンジしてみてください。

【Ruby on Rails】DockerでRuby on Rails+Nginx+MySQLの環境構築をする | いっしー@Webエンジニア