#本記事の目的
**DockerでRuby on Railsの環境構築(Mysql)**を行うことです。
DBにMysqlを使ったDockerの構築記事が少なかったため、備忘録も兼ねて投稿します。
#参考記事
https://qiita.com/kodai_0122/items/795438d738386c2c1966
#1. 開発用フォルダを用意する。
まず、ローカルでアプリ開発用のフォルダを作成します。
私の場合は desktop/Docker/test_app で作りました。フォルダ名はなんでもOKです。
cdコマンドで、作業フォルダへ移動します。
$ cd test_app
#2. 必要なファイルを用意する。
1で作成したフォルダ内に以下のファイルを作成します。
$ touch Dockerfile
$ touch Gemfile
$ touch Gemfile.lock
$ touch entrypoint.sh
$ touch docker-compose.yml
では、ファイルにコードをコピペしていきましょう。
##2.1 Dockerfile
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
##2.2 Gemfile
source 'https://rubygems.org'
ruby 2.6.6
##2.3 Gemfile.lock
記入の必要なし
##2.4 entrypoint.sh
set -e
rm -f /myapp/tmp/pids/server.pid
exec "$@"
##2.5 docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- ./db/mysql/volumes:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
- gem_data:/usr/local/bundle
ports:
- 3000:3000
depends_on:
- db
tty: true
stdin_open: true
volumes:
gem_data:
#3. Railsアプリを作成する
以下のコマンドでアプリを生成します。
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
##3.1 database.ymlの記述を一部変更
passwordとhostを追記&変更する。
<変更前>
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: localhost
<変更後>
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
passwordの'password'はdocker-compose.yml
のpasswordから引っ張ってきます。
##3.2
rails newによってGemfileが更新されたので、buildを実行します。
$ docker-compose build
#4 コンテナを起動する
以下のコマンドでコンテナを起動します。
$ docker-compose up
エラーが出ていなければOK。
ちなみに、私の場合はこちらのエラーが発生しました。
Could not find gem 'mysql2 (>= 0.4.4, < 0.6.0)' in any of the gem sources listed in your Gemfile.
以下の記事を参考に解決しました。
https://qiita.com/satto0303/items/c135c2279a1646921fc2
#5 データベースを作成
別のターミナルを開いて、
$ docker-compose run web rails db:create
http://localhost:3000/ にアクセスでとりあえず構築完了!!!!
#その他備忘録
##動いているコンテナの確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80e7c7569b8a portfolio_web "rails db:create" 3 hours ago Exited (0) 3 hours ago portfolio_web_run_578a8e6c5926
8687f77540da portfolio_web "bundle install" 3 hours ago Exited (0) 3 hours ago portfolio_web_run_32dae7dd2ba0
f77a6d0dafc9 portfolio_web "bash -c 'rm -f tmp/…" 3 hours ago Exited (1) About a minute ago portfolio_web_1
07b862208052 6b4fc0257a56 "rails new . --force…" 4 hours ago Exited (0) 4 hours ago portfolio_web_run_2b7494c2bb36
e4640ddc3fd9 mysql:5.7 "docker-entrypoint.s…" 4 hours ago Exited (0) About a minute ago portfolio_db_1
2f526f183e02 112d1629d727 "/bin/sh -c 'bundle …" 4 hours ago Exited (4) 4 hours ago hardcore_jepsen
63feb99baec8 112d1629d727 "/bin/sh -c 'bundle …" 4 hours ago Exited (4) 4 hours ago intelligent_satoshi
319da14a6566 ccd1a9b10055 "/bin/sh -c 'bundle …" 4 hours ago Exited (4) 4 hours ago hardcore_lumiere
2ac3e9c8d7bf ad0d1e7dc37d "/bin/sh -c 'bundle …" 4 hours ago Exited (4) 4 hours ago sweet_bhaskara
376ba7740aa6 postgres "docker-entrypoint.s…" 22 hours ago Exited (0) 12 hours ago myapp_db_1
##コンテナの削除
docker rm [コンテナID]
$ docker rm 376ba7740aa6