目次
開発環境
- 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 2 3 4 5 6 7 | project-root/ ├── docker/ │ ├── web/ # Rubyコンテナ(Dockerfile) │ ├── database/ # MySQLコンテナ(Dockerfile) │ └── nginx/ # Nginxコンテナ(Dockerfile + 設定ファイル) ├── web/ # Ruby on Railsアプリケーションを配置するディレクトリ └── docker-compose.yml # Docker Composeファイル |
docker-compose.ymlを作成
まずはdocker-compose.ymlを作成していきます。
ルートディレクトリの直下にdocker-compose.ymlを作成し、以下のようにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | version: '3.8' services: web: build: context: . dockerfile: docker/web/Dockerfile container_name: rails_web ports: - "3000:3000" volumes: - ./web:/var/www/html depends_on: - db |
Rubyコンテナを作成
次にRubyコンテナを作成していきます。
docker/web/
ディレクトリの直下にDockerfileを作成し、以下のようにしてください。
1 2 3 4 5 6 7 | FROM ruby:3.2 WORKDIR /var/www/html COPY ./web /var/www/html/ RUN gem install bundler && bundle install |
web/
ディレクトリの直下にGemfileを作成し、以下のようにしてください。
1 2 3 | source 'https://rubygems.org' gem 'rails' |
web/
ディレクトリの直下にGemfile.lockを作成してください。
Gemfile.lockの中身は空で問題ありません。
Ruby on Railsアプリケーションの作成
次にRuby on Railsアプリケーションの作成をしていきます。
まずは以下のコマンドでプロジェクトディレクトリに移動します。
1 | cd project-root |
以下のコマンドでRubyコンテナをビルドします。
1 | docker-compose build |
以下のコマンドでRuby on Railsアプリケーションを作成します。
1 | docker-compose run --rm web rails new . --force --database=mysql |
MySQLコンテナを作成
次にMySQLコンテナを作成していきます。
docker/database/
ディレクトリの直下にDockerfileを作成し、以下のようにしてください。
1 | FROM mysql:8.0 |
Nginxコンテナを作成
次にNginxコンテナを作成していきます。
docker/nginx/
ディレクトリの直下にDockerfileを作成し、以下のようにしてください。
1 2 | FROM nginx:alpine COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf |
docker/nginx/
ディレクトリの直下にdefault.confを作成し、以下のようにしてください。
1 2 3 4 5 6 7 8 9 10 11 | server { listen 80; server_name localhost; location / { proxy_pass http://web:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
docker-compose.ymlを修正
docker-compose.ymlを修正していきます。
ルートディレクトリの直下のdocker-compose.ymlを以下のように修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | version: '3.8' services: web: build: context: . dockerfile: docker/web/Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -b '0.0.0.0'" container_name: rails_web ports: - "3000:3000" volumes: - ./web:/var/www/html depends_on: - db db: build: context: . dockerfile: docker/database/Dockerfile container_name: rails_db environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: rails_db MYSQL_USER: rails_user MYSQL_PASSWORD: rails_password ports: - "3306:3306" volumes: - db_data:/var/lib/mysql nginx: build: context: . dockerfile: docker/nginx/Dockerfile container_name: rails_nginx ports: - "80:80" volumes: - ./web:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - web volumes: db_data: |
Ruby on Railsアプリケーションのデータベース設定
次にRuby on Railsアプリケーションのデータベース設定をしていきます。
Ruby on Railsアプリケーションのdatabase.yml
設定を以下のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: rails_user password: rails_password host: db development: <<: *default database: rails_db test: <<: *default database: rails_db |
Dockerコンテナをビルド
次にDockerコンテナをビルドしていきます。
まずは以下のコマンドでプロジェクトディレクトリに移動します。
※プロジェクトディレクトリに移動済の場合はスキップしてください。
1 | cd project-root |
以下のコマンドでDockerコンテナをビルドします。
1 | docker-compose build --no-cache |
ブラウザでhttp://localhost
にアクセスし、Ruby on Railsアプリケーションの初期画面が表示されていれば成功です。
まとめ
今回はDockerでRuby on Railsの環境構築をする手順について解説していきましたが、いかがだったでしょうか。
個人開発のみであればDockerは不要かもしれませんが、Dockerコンテナで開発環境を構築することにより、複数人でプロジェクトを進める場合でも同じ環境で開発を進めることができます。
Dockerを使った開発は必須となりつつありますので、是非、チャレンジしてみてください。