6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Rails + MySQL のローカル環境を Docker で構築をする

Last updated at Posted at 2020-04-24

はじめに

RailsのアプリをDockerで環境構築したのでその時のことを書いていきます。

今回は既に作ってある Rails アプリに Docker を導入していきます。

Rails + MySQLの構成を docker-compose で立ち上げるところまでしていきます

Docker導入の準備

1. Rails 用の Dockerfile を作成する

Rails アプリのディレクトリに Dockerfile を作ります。
プロジェクト名は sample_app としました。

sample_app user$ touch Dockerfile

Dockerfile に書き込んでいきます。

Dockerfile
FROM ruby:3.0.0
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -qq && apt-get install -y build-essential nodejs yarn
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /app

以下、ざっとこの Dockerfile の流れです

FROM ruby:3.0.0
→ 今回は Ruby の3.0.0のバージョンを使います。
これでコンテナ内で Ruby の3.0.0バージョンが使えるようになります。

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - ...(以下省略)
→ yarn(Rails6では必要)をインストールするための準備です。

RUN apt-get update -qq && apt-get install -y build-essential nodejs yarn
→ Railsを動かすために必要なものをコンテナ内にインストールします。

RUN mkdir /app
→ コンテナ内ににappという名前でディレクトリを作ります。

WORKDIR /app
→ WORKDIRコマンドでディレクトリを指定することで、それ以降の命令は全てそのフォルダ内で実行されることになります。

COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
→ホストのGemfileとGemfile.lockをコンテナ内のappディレクトリにコピーします。

RUN gem install bundler
→コンテナに bundler をインストールします。

RUN bundle install
→コンテナ内で Gemfile に書かれた gem をインストールします。

COPY . /app
→ホストの Rails のフォルダをコンテナの app ディレクトリにコピーします。

2. docker-compose.ymlを作成する

docker-compose.yml を書いていきます。

docker-compose.yml
version: '3'
services:  
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password #適宜自分のMySQLのパスワードにしてください
    volumes:
     - mysql-db:/var/lib/mysql
  web:
    build: .
    command: bundle exec rails s -b 0.0.0.0
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  mysql-db:
    driver: local

3. docker-compose でRailsを起動する。

docker-comoseコマンドでRailsを起動します。
以下を順に実行しましょう。

# Docker イメージをビルドします。
sample_app$ docker-compose build

# DBが作られていないので rails db:createが必要です
sample_app$ docker-compose run web rails db:create

# migrate もします。
sample_app$ docker-compose run web rails db:migrate

# 起動
sample_app$ docker-compose up

4. その他のコマンド

# -d をつけるとバックグラウンドで起動できる
sample_app$ docker-compose up -d
# アプリを止めるときは
sample_app$ docker-compose stop
# 再起動するとき
sample_app$ docker-compose start
# アプリの停止 + コンテナの削除
sample_app$ docker-compose down
# -v をつけると volume も削除できる(今回で言うとDB)
sample_app$ docker-compose down
# console を開きたいとき
sample_app$ docker-compose run web rails c

#おわりに
Dockerを使えると環境構築が楽で良いですね

6
11
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
6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?