dockerで作るrails6環境(rails6+puma+nginx+mysql)

docker 開発環境構築


dokcerでlaravelとgolangやreactの環境を作成したがそのrailsバージョンです。

下記を参考に少しカスタマイズしました。

https://qiita.com/kohki4115/items/c37ff8550b01bbc75df2

railsの構築で結構ひっかかってしまったのは、rails newコマンド(今回は下記)

docker-compose run --rm app rails new . --force --database=mysql --skip-bundle

でGemfileに色々記述が入る事

つまり

1.rails newをする事でGemfileが更新される。
2.dockerfileに記述されているbundle installでGemfileのインストールが実行される。
3.docker-composeに記述されているpumaのサーバー実行が行える。

となります。

用意するファイルは下記の通り

version: '3'
services:
  app:
    build:
      context: .
    tty: true
    env_file:
      - ./environments/db.env
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/webapp
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
      - log-data:/webapp/log
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=rails_db
      - MYSQL_USER=rails_user
      - MYSQL_PASSWORD=rails_password
      - MYSQL_ROOT_PASSWORD=secret
      - TZ=Asia/Tokyo
    volumes:
      - db-data:/var/lib/mysql
  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:
FROM ruby:2.5.1

# リポジトリを更新し依存モジュールをインストール
RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       nodejs

# ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ)
RUN mkdir /webapp
WORKDIR /webapp

# ホストのGemfileとGemfile.lockをコンテナにコピー
ADD Gemfile /webapp/Gemfile
ADD Gemfile.lock /webapp/Gemfile.lock

# bundle installの実行
RUN bundle install

# ホストのアプリケーションディレクトリ内をすべてコンテナにコピー
ADD . /webapp

# puma.sockを配置するディレクトリを作成
RUN mkdir -p tmp/sockets

のちにフォルダ構成を変えた項目を加筆します。

作成後のテスト

ユーザーの名前だけを作成するCRUD

docker-compose exec app rails g scaffold users name:string

マイグレーション

docker-compose exec app rails db:migrate