dockerで作るrails6環境(rails6+puma+nginx+mysql)
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