DockerでRails+MySQLの開発環境を作る
先日は自作のポートフォリオを作るために環境構築を進めていました。
しかし今Dockerを利用して課題を進めているのでどーせならDockerを使って開発を進めデプロイまでできればより高評価につながるかと思いましたのでDockerを使ってポートフォリオを作る方向でいきたいと考えました。
そこでRailsでのDockerを使った開発環境の作り方を忘れないためにもまとめておきます。
前提
前提として既にDockerはインストールしてあることにします。
*インストール👇
参考までに👇
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ページが表示されれば完成!(これでると嬉しいよね)
11.個人的に大事なコマンド(意外に重要)
docker-compose upで作業を続けコンテナ停止したいなって時は
1.ctrl + c
2.docker-compose stop
この2段階が必要。
これをしないと次に立ち上げる時に立ち上がらなくなる。
解決方法はこれを参考にして欲しいです。
最後に
Dockerについても初心者には難しい概念なんかも少しづつ分かってきたり課題であるsolidusも少しづつ掴めてきた気がします。
それなりに成果を残さなければそれなりの評価はもちろんもらえません。
やることは山ほどあって今は吸収の時期です。あと2ヶ月後には内定を勝ち取れるよう頑張っていこう。
おやすみ。