DockerでRuby on Rails+MySQLの環境を構築する方法【Windowsもエラーなし】

  • URLをコピーしました!

ども、Simi (@simi_log)です。

Windows環境でどうしてもDockerでRuby on Railsの環境構築をしたくて、Qitaなどのサイトを参考に色々やったんですが、エラーばかりで結局6時間以上か掛かりました・・・。

原因は全く分かっていませんが、Udemyを受講して解決しました。講座名は「フルスタックエンジニアが教える即戦力Railsエンジニア養成講座」です。環境構築のためにお金を使ってしまったわけですが、たったの1300円でRubyの基本からDockerの解説やユーザー認証機能、MySQLの基本、テストコードの書き方まで幅広く学べるので良い自己投資になりそうです。結果オーライ(笑)

てことで僕のように環境構築段階のエラーで時間を無駄に過ごしてしまう哀れで悲しい人を減らしたいという思いから、 今回はWindows環境でもDockerを使ってエラーなしでRuby on Railsの環境を構築する方法を共有します。

環境構築にあたって大まかな流れは以下です。

  1. Docker Toolboxの導入
  2. ディレクトリを構成する
  3. ビルドしてコンテナを起動する
  4. コンテナを起動してテストページを表示する

全く無の状態から僕が手こずった部分も紹介しながら説明していきます!

目次

Docker Toolboxの導入

Windows10 HomeもしくはMacでは、仮想環境のLinux上でDockerを動かすことになります。仮想環境を作成するためにはVirtual Boxが必要なのですが、Virtual BoxとDockerの環境を簡単に構築してくれるのがDocker Toolboxというツールです。

Windosws10 Homeの方はDockerToolbox for Windowsを、Macの方はfor Macをインストールしてください。Windows10の場合で話を進めていきますがMacでも同様だと思います。

参考にしたサイト:windows 10 home で docker を導入するメモ

こちらのサイトにアクセスして下の方の「DockerToolbox-{最新バージョン}.exe」をクリックするとダウンロードが始まります。

ダウンロードが完了したらexeファイルをクリックしてインストールしましょう。オプションはデフォルトのままで、Nextを押しまくれば良いと思います。

インストールが完了するとデスクトップに3つのアイコンが作成されるます。

「Docker Quickstart Terminal」をダブルクリックで起動すると、初期設定が始まりDockerのクジラマークが表示されたら完了です。

以上で環境構築のベースは出来上がりました。

ディレクトリを構成する

任意のフォルダに以下ファイルを作成します。

  1. Dockerfile:Dockerの新しいイメージ作成用
  2. Gemfile
  3. Gemfile.lock
  4. docker-compose.yml

Gemfile.lockは空で良いですが、他は基本的に以下をコピペしてください。

Dockerfile

FROM ruby:2.4.5
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
  1. Rubyリポジトリのバージョン2.4.5のイメージを指定
  2. 仮想環境上のコンテナ内でbuild-essentialとnodejsをインストール
  3. コンテナのrootディレクトリにappディレクトリを作成
  4. appディレクトリに移動
  5. ホストPCにあるGemfileをコンテナ内のappディレクトリにコピー
  6. ホストPCにあるGemfile.lockをコンテナ内のappディレクトリにコピー
  7. gemfile.lockを元にgemのインストールを行います。
  8. ホストPCにあるファイルをすべてコンテナ内のappディレクトリにコピー

Rubyのバージョン2.4.5は古いので最新バージョンを指定しても良いですが、動作の保証はできないです。自分が使用している教材のバージョンに合わせるのが一番だと思います。

Gemfile

source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
  1. gemのダウンロード元URLを指定
  2. railsのバージョン5.0.0.1を指定

Dockerfile内のbundle installが実行されるとここで指定したrailsのgem(ライブラリ)がインストールされ、Gemfile.lockの中身が書き加えられます。

Gemfileはgemの設計図みたいなもの。

Gemfile.lock

これは空で大丈夫です。

Gemfile.lockはgemイントール後の結果図のようなものです。rails用のgemのインストール時に様々な種類のgemがインストールされますが、それらの依存関係をGemfile.lockに記載してくれます。

依存関係を記述したGemfile.lockをbundle installコマンドで実行すると、その依存関係に従って環境を構築してくれるそうです。

docker-compose.yml

version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - db
    tty: true
    stdin_open: true
  db:
    image: mysql:5.7
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
volumes:
  db-volume:
  • 1行目はdocker-compose.ymlのバージョンを指定
  • サービスのwebはRailsコンテナの定義でdbはMySQLサーバーコンテナの定義
  • 4行目のbuildはymlファイルと同じディレクトリ(.)にあるDockerfileを元にイメージを作成
  • 5行目commandでコンテナを起動したときにデフォルトで実行されるコマンドを指定(使用するのはrailsサーバー、ポート3000、バインドするipアドレスを0.0.0.0(すべてのネットワークインターフェース)に指定)
  • 6, 7行目ではPC上のファイルをコンテナ内のappディレクトリにマウント(同期させるため)
  • 8, 9行目ではPCの公開ポート番号:コンテナの転送先ポート番号を指定
  • 10, 11行目ではrailsサーバーよりも早くMySQLサーバーを先に起動する設定
  • 12, 13行目はデバッグ用
  • 15行目では使用するMySQLのバージョンを指定
  • 16, 17, 20,21行目ではPC上にdb-volumeという名前で作成したデータ保持領域をコンテナの/var/lib/mysqlディレクトリにマウント(同期させるため)
  • 18, 19行目では環境変数の設定でMySQLのrootユーザーのパスワードを指定

ymlはrailsの設定ファイルでよく使われるフォーマットで、構造を表すデータです。インデントをいじるとすぐエラーになるので注意しましょう。←いじってバグった人

ビルドしてコンテナを起動する

DockerQuickstartTerminal上でcd コマンドを使って先ほど作成したディレクトリに移動します。

そしたら以下コマンドを実行。

$ docker-compose run web rails new . –force –database=mysql

前半部の「docker-compose run web 」はdocker-comopse.ymlで定義したweb(Railsのコンテナ)で実行することを意味しています。

後半部ではコンテナ内の/appディレクトリ(.)に新しいRailsプロジェクトのファイルを作成します。PC上の現在のディレクトリとマウントしているため、同時に現在のディレクトリにもRailsのプロジェクトが作成されます。forceオプションは同じファイルがあった場合に上書きを行うための設定で、–databaseオプションは使用するデータベースに合ったプロジェクトファイルを作成するための設定です。

=を==にしないように気を付けよう←間違えた人

実行が終了するとディレクトリにプロジェクトが作成されます。

この時点でGemfileとGemfile.lockが書き換わっているかと思います。

Gemfileの実行と作成されたファイルをコンテナに取り込むためにもう一度ビルドします。

以下コマンドを実行。

$ docker-compose build

ビルドが完了したらデータベースの設定をいじります。編集するのはconfigディレクトリのdatabase.ymlです。

以下の部分でpasswordをdocker-compose.ymlに記載したパスワードであるpasswordに、hostをMySQLサーバーのコンテナのサービス名であるdbにします。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: password
  host: db

以下コマンドを実行すると、docker-compose.ymlに基づいてコンテナが起動します。

$ docker-compose up -d

以下コマンドでrailsサーバーとMySQLのサーバーのコンテナが起動していることを確認してください。

$ docker ps

続いて以下コマンドを入力して、開発環境用のデータベースを作成します。

$ docker-compose run web bundle exec rake db:create

rakeコマンドでデータベースがMySQLサーバー上に新規作成されるようです。

コンテナを起動してテストページを表示する

仮想マシンのIPアドレスを知るために以下コマンドを実行します。

$ docker-machine ip default

ここで表示されたIPをブラウザにぶちこみ、ポート番号を以下のように指定しましょう。

192.168.99.100:3000

Yay!You’re on Rails!が表示されたら成功です!いえあああ(笑)

まとめ

今回はWindows環境でDockerを使ってRuby on Railsの環境を構築する方法を紹介しました。

環境構築だけで半日を過ごしてしまいました・・・。作業中はWindowsを嫌いになってしまい、MacBook PROの購入ページを眺めていたほどです(笑)

Udemyではこんな感じの有益な情報を安くゲットできるので受講してみる価値は多いにあるかと思います。参考にしてみてください。

参考にしたUdemy 講座: フルスタックエンジニアが教える即戦力Railsエンジニア養成講座

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

情報工学の修士号を取得後、新卒で大手メーカーに就職。2022年にWeb系企業に転職。
役立つサービスや日々思ったことを発信中。
趣味は旅行、カメラ、動画制作。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次