2
2

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.

【Rails6】Dockerによる開発環境構築

Last updated at Posted at 2020-12-25

#はじめに

先日開発環境にDockerを導入しましたが、記事に書いてあるコードをほとんど模写したような状態であったため、本日改めてコードの意味を確認するため、記述していきます。

なお、環境構築を行うにあたり、参考にさせて頂いた記事は以下です。

docker ruby(2.6.5)・mysql(5.6.47)・rails(6.0.0)の開発環境構築
既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】
Docker + rails6 + MySQL + bootstrap,jqueryまで環境構築完全ロードマップ
Docker公式:Railsクイックスタート

本当にありがとうございました🙇‍♂️🙇‍♂️🙇‍♂️

#環境
Ruby on Rails '6.0.0'
Ruby '2.6.5'
MySQL '5.6.47'

#Dockerfile

まずコマンドについて整理しておきます。

コマンド 意味
FROM ベースイメージの指定
RUN コマンドの実行、パッケージのインストールなどで使用
WORKDIR 作業ディレクトリの変更、cdのイメージ
COPY 指定したファイル・ディレクトリをコンテナ内にコピー
ENTRYPOINT docker run時に実行されるコマンド
EXPOSE 公開するポートの指定
CMD docker run時に実行されるコマンド
Dockerfile
FROM ruby:2.6.5
#アプリケーションのrubyのversionを記述。

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 \
    && apt-get update -qq \
    && apt-get install -y nodejs yarn \
    && mkdir / myapp
#Docker環境に必要なパッケージをインストール。Rails6の場合、webpackerが標準になったため、yarnのインストールも行う。

WORKDIR / myapp
#上記のmkdirで作成されたディレクトリへ移動
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
#GemfileとGemfile.lockをコンテナ内にコピー
RUN gem install bundler
RUN bundle install
#bundlerをインストールし、bundle installを実行。
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
#entrypoint.shを呼び出し、実行。entrypoint.shについては後ほど記述していきます。

CMD ["rails", "server", "-b", "0.0.0.0"]
#「rails s」のイメージ

#entrypoint.sh

entrypoint.sh
set -e
#エラーが発生するとスクリプトが終了される

rm -f /myapp/tmp/pids/server.pid
#railsのserver.pidを削除

exec "$@"
#CMDで渡されたコマンドを実行している

↓Docker公式よりentrypoint.shについて引用↓
「次に、特定のserver.pidファイルが存在する場合にサーバーが再起動しないようにするRails固有の問題を修正するためのエントリポイントスクリプトを提供します。このスクリプトは、コンテナが起動するたびに実行されます。 entrypoint.shで構成されています:」

#docker-compose.yml

docker-compose.yml
version: '3'
#docker-composeのバージョンを指定
services:
  db:
    image: mysql:5.6.47
#使用するイメージを指定
    environment:
      MYSQL_ROOT_PASSWORD: password
#mysqlのパスワードを指定。環境変数を定義
    ports:
      - '3306:3306'
#ポート番号の指定。[ホスト:コンテナ]で設定
    volumes:
      - mysql-data:/var/lib/mysql
#データの永続化が可能に。ディレクトリのマウント設定
  web:
    build: .
#Dockerfileがあるパス
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
#server.pidを削除してから、rails sを実行するコマンド
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
#依存関係を設定
    stdin_open: true
    tty: true
#この2つを指定しないと、コンテナが起動してもすぐ終了してしまうらしい

#database.yml

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: 
  host: db
  socket: /tmp/mysql.sock

Railsはデフォルトでhost:localhostになるため、
hostを先ほど作成したdbに変更する。

#コンテナの起動

ターミナル
% docker-compose build
% docker-compose up -d
% docker-compose exec web rails db:create
% docker-compose exec web rails db:migrate

#おわりに

Docker公式などを翻訳しながら調べてみたので、間違えている箇所ありましたら、ご教授ください。。。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?