DockerでRails+MySQLの開発環境を作る

先日は自作のポートフォリオを作るために環境構築を進めていました。

しかし今Dockerを利用して課題を進めているのでどーせならDockerを使って開発を進めデプロイまでできればより高評価につながるかと思いましたのでDockerを使ってポートフォリオを作る方向でいきたいと考えました。

そこでRailsでのDockerを使った開発環境の作り方を忘れないためにもまとめておきます。

 

前提

 前提として既にDockerはインストールしてあることにします。

*インストール👇

www.docker.com

参考までに👇

qiita.com

 

1.ディレクトリ作成

$ mkdir myapp

rails new はまだ行わずあとでDockerコンテナ内でする。

cd myappで移動しておく。

 

2.Dockerfile作成

 $ touch Dockerfile で作成し以下を記入

myapp/Dockerfile

FROM ruby:2.4.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

 

3.GemfileとGemfile.look作成(新規作成の場合のみ)

 $ touch Gemfile

myapp/Gemfile

source 'https://rubygems.org'
gem 'rails', '5.1.4'

$ touch Gemfile.look

myapp/Gemfile.look

Gemfile.lookは記述しない。


 4.Docker-compose.ymlを書く

 $ touch  Docker-compose.yml

myapp/Docker-compose.yml

version: '3'
services:
db:
image: mysql
environment:
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: password
ports:
- '3316:3306'
volumes:
- ./db/mysql/volumes:/var/lib/mysql


web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db

5.rails newでDoxkerコンテナ内にスケルトン作成(新規プロジェクトの場合のみ)

$ docker-compose run web rails new . --force --database=mysql

docker-compose.ymlの volumes: - .:/myapp の部分でdockerとローカルのディレクトリを同期するように設定しているため、このコマンドを実行後、同時にローカルにも同様のファイルが生成される。(違う名前のディレクトリにした人は変える必要あり!)

6.イメージを再ビルド(rails newで新しく追加されたgemをinstallするため)

$ docker-compose


7.database.ymlの設定

 config/database.yml

default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db

 

docker-compose.ymlで MYSQL_ROOT_PASSWORD で設定したパスワードを設定すること。
また、host名は、dockerのネットワーク内であれば、docker-composeで定義したサービス名 db で参照できるのがポイント。

 

8.docker-compose  up で各サービスを立ち上げる

$ docker-compose up

railsサーバーとmysqlサーバーを同時に起動してくれます。(本当に優秀)

9.dbをinitする

$ docker-compose run web rake db:create

どうやらこれをやらないとエラーが起こるらしい。

10.完成

 ブラウザで http://localhost:3000 にアクセスして
welcomeページが表示されれば完成!(これでると嬉しいよね)

f:id:yamasey712:20190821212314p:plain


11.個人的に大事なコマンド(意外に重要)

 docker-compose  upで作業を続けコンテナ停止したいなって時は

1.ctrl + c

2.docker-compose  stop

この2段階が必要。

これをしないと次に立ち上げる時に立ち上がらなくなる。

解決方法はこれを参考にして欲しいです。

 

yamasey712.hatenablog.com

 

最後に

 Dockerについても初心者には難しい概念なんかも少しづつ分かってきたり課題であるsolidusも少しづつ掴めてきた気がします。

それなりに成果を残さなければそれなりの評価はもちろんもらえません。

やることは山ほどあって今は吸収の時期です。あと2ヶ月後には内定を勝ち取れるよう頑張っていこう。

おやすみ。