LoginSignup
13
13

More than 3 years have passed since last update.

【Rails】既存のRails6プロジェクトにDockerを導入してみる

Last updated at Posted at 2020-12-08

はじめに

既存のRailsプロジェクトをDockerに乗せていきます。
初学者による記事なので間違い等ございましたらご指摘いただけると幸いです。
※本記事は開発環境のみの導入を対象としています。

参考

Dockerが何なのか全く分からない!という方はまずは下記の記事を参考にDockerを触ってみてください。
DockerをMacにインストールする
こちらの記事も手っ取り早くDockerをふんわり理解するのにオススメです。
Dockerについてなるべくわかりやすく説明する

環境

  • macOS Catalina 10.15.7
  • Ruby 2.6.5
  • Rails 6.0.3.3
  • Docker 19.03.13
  • docker-compose 1.27.4
  • MySQL 5.6.47

目次

  • 必要ファイルの作成
    • ファイル構成
  • 作成したファイルの編集
  • コンテナの起動

必要ファイルの作成

必要ファイルは以下の5つです。rails newをした際に自動生成されるファイルもあるので必要なもののみ作成していきましょう。

  • Dockerfile
  • docker-compose.yml
  • Gemfile
  • Gemfile.lock
  • database.yml

ファイル構成

既存のアプリケーション名
└── app
     ├── Dockerfile  # 作成
     ├── docker-compose.yml  # 作成
     ├── Gemfile
     ├── Gemfile.lock
     ├── config
          └──database.yml

作成したファイルの編集

Dockerfile

Dockerfile

FROM ruby:2.6.5   #自身のrubyバージョンを指定 (ruby -v)

RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
    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 && apt-get install -y --no-install-recommends\
    nodejs \
    yarn \
    mariadb-client  \
    build-essential  \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /myproject

COPY Gemfile /myproject/Gemfile
COPY Gemfile.lock /myproject/Gemfile.lock

RUN gem install bundler
RUN bundle install
RUN yarn install --check-files

COPY . /myproject

Rails6でwebpackerが標準になったことでyarnのインストールが必要になってきます。
Docker Hubで確認するとrubyのイメージはDebian系となっているので、yarnの公式ドキュメントに記載されているOS毎のインストール方法を参考に記述していきます。
ちなみに、yarnの公式ドキュメントは日本語表示のままだとなぜかOSの選択肢の中にMacとWindowsしか表示してくれないので英語表示に切り替えて確認しましょう。

日本語表示
Screen Shot 2020-12-08 at 19.48.15.png
英語表示
Screen Shot 2020-12-08 at 19.48.30.png

docker-compose.yml

docker-compose.yml
version: '3'

services:
  db:   #データベースのコンテナ作成
    image: mysql:5.7   #自身のmysqlバージョンを指定 (mysql --version)
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    ports: 
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql 
    environment:
      MYSQL_DATABASE: myapp_development   #プロジェクト名_development
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: root
      MYSQL_PASSWORD: password

  web:   #アプリケーションのコンテナ作成
    build:
      context: .
      dockerfile: Dockerfile
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    tty: true 
    stdin_open: true
    depends_on:
      - db
    ports:
      - "3000:3000"
    volumes:
      - .:/myproject
volumes:      #dbを永続化するための記述
  mysql-data:

Gemfile

Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6.0.0'

既存アプリケーションの場合この記述はすでにあるはずですが念のため確認しておきましょう。

database.yml

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root   #docker-compose.ymlで指定したユーザー名
  password: password   #docker-compose.ymlで指定したパスワード

development:
  <<: *default
  database: myapp_development   #プロジェクト名_development
  host: db   #docker-compose.ymlでデータベースのコンテナ作成部分で指定したservice名

test:
  <<: *default
  database: myapp_test   #プロジェクト名_test
  host: db   #docker-compose.ymlでデータベースのコンテナ作成部分で指定したservice名

アプリケーションのコンテナからデータベースのコンテナに接続するための設定を記述していきます。
セキュリティ面を気にする場合はusernameとpasswordに環境変数を設定しましょう。今回は開発環境のみということもあり設定していません。

コンテナの起動

ターミナル
cd myapp
docker-compose build    #コンテナを建てる
docker-compose up -d   #コンテナ起動(-dオプションをつけることでバックグラウンドで実行)

これで localhost:3000 にアクセスするとページが表示されます◎

  • エラーが発生した場合は
ターミナル
docker-compose logs -f

でリアルタイムでログの確認ができるのでエラー原因を探して解決しましょう。

  • サーバーを停止させたいときは以下のコマンドを実行してください。
ターミナル
docker-compose down

最後に

実装に思いの外手間取ったので備忘録的に記事にしてみました。
どなたかの参考になれば幸いです。

13
13
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
13
13