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