#はじめに
Docker上にRailsの開発環境を構築したのでメモとして残しておく。
#前提
Dockerがインストール済みであること。
・Docker for Windows
https://www.docker.com/docker-windows
・Docker for Mac
https://docs.docker.com/docker-for-mac/install/
#ルートディレクトリの作成
$ mkdir myapp
#dockerfileの作成
FROM ruby:2.6.3
ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /my_app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
#Gemfileの作成
source 'https://rubygems.org'
gem 'rails', '5.2.3'
#空のGemfile.lockを作成
$ touch Gemfile.lock
#docker-compose.ymlの作成
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/my_app
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:5.7
volumes:
- .mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password
#rails newの実行
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
rails newでアプリケーションのひな形となるディレクトリやファイルが自動生成される。
後で再度ビルドを行う必要がある為、--skip-bundleでビルドをスキップする。
#Gemfileの編集
gem 'mini_racer', platforms: :ruby
Javascriptの実行エンジンであるv8を叩ける用にしてくれるgemである、mini_racerのコメントをはずす
#buildの実行
$ docker-compose build
#database.ymlの編集
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
configフォルダ配下にあるdatabase.ymlの以下のように編集
・password
docker-compose.ymlのMYSQL_ROOT_PASSWORDの値にする。
・host
docker-compose.ymlのdepends_onの値にする。
#コンテナを起動
$ docker-compose up -d
後で起動中のコンテナに入りrailsコマンドを実行する為、-dでバックグラウンドで実行しておく。
#modelの作成
起動中のコンテナの一覧を確認する。
$ docker ps
以下の様に一覧が表示される。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c27856156df0 my_app_web "bundle exec rails s…" 5 seconds ago Up 4 seconds 0.0.0.0:3000->3000/tcp my_app_web_1
f3c12d1b91be mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp, 33060/tcp my_app_db_1
docker execでRailsアプリのコンテナに入る。
$ docker exec -it my_app_web_1 sh
modelを作成する為にrailsコマンドを実行する。
$ rails db:create