【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を使った開発は必須となりつつありますので、是非、チャレンジしてみてください。