1
1

More than 3 years have passed since last update.

【Rails環境構築】Docker + Rails + Mysql

Last updated at Posted at 2021-02-23

本記事の目的

DockerでRuby on Railsの環境構築(Mysql)を行うことです。
DBにMysqlを使ったDockerの構築記事が少なかったため、備忘録も兼ねて投稿します。

参考記事

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

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

Gemfile
source 'https://rubygems.org'
ruby 2.6.6

2.3 Gemfile.lock

記入の必要なし

2.4 entrypoint.sh

entrypoint.sh

set -e

rm -f /myapp/tmp/pids/server.pid

exec "$@"

2.5 docker-compose.yml

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を追記&変更する。

<変更前>

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

<変更後>

database.yml
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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1