楽屋

DockerでRailsとMySQLの環境構築

はじめに

こんにちは。データ事業二部マネージャーの栁原雄基です。

学生時代は宇宙物理学の分野に身を置き、宇宙の神秘と対話しておりました。
現在は常にクライアントとの対話を心がけ、よりよいソリューション提供に努めております。

本記事ではdockerを利用したRuby on Rails + MySQLの開発環境の構築の手順を説明いたします。
今回ご紹介する方法は、開発に利用するため構成です。
運用に利用する場合はこれとは違った設定になります。
そちらは今後紹介できたらと考えています。

利用した環境は以下です。

・マシン : MacBook Pro (Retina, 13-inch, Early 2015)
・OS : OS X El Capitan Version 10.11.6

背景

ある案件では、Ruby on RailsとMySQLで構成された社内ツールを提供しております。

以前はVirtualBoxで上記ツールの開発環境を作り開発を行っていました。
その頃は、自分のノートPCに仮想環境を作り、rbenvを導入し、何故かこのgemインストールできない???あーMySQLも入れなきゃ…とやっていました。
そうすると気がついたら日が暮れている…ということもしばしば。
これに共感される方も多いかと思います。

それにくらべるとDockerによる仮想環境は比較的パフォーマンスがよく、他の作業者への共有も容易です。
環境をgitだけで共有出来る点がよいですね。
virtualboxの頃は、boxを作ってs3にアップしたりとか面倒でしたが。

僕も社用PCの乗り換えをきっかけにDockerを始めることにしました。

Dockerの詳しい説明は他の記事に譲ることにし、具体的な作業を説明します。

作業手順

作業手順は以下の通りです。
今回の目指す環境がrailsとmysqlが連携したものであるためdocker-composeを利用します。

1, docker-compose.yml作成
2, Dockerfile作成
3, ビルド及び起動とデータ投入

試行錯誤の末、以下の構成になりました。
以下で作成する2ファイルは、既存のrailsプロジェクトのルートディレクトリに置かれる想定です。
これによりgitの管理に含まれます。

docker-compose.yml作成

docker-composeは複数のイメージを連携してコンテナを作成するときに利用します。

念のため補足しますと、コンテナ(Dockerコンテナ)とは、イメージ(Dockerイメージ)から作られる実体ということになります。
オブジェクト指向の考え方における、クラスとインスタンスということですね。
料理で言えば、レシピと作られた料理の現物という関係になります。

今回はrailsのイメージとmysqlのイメージを利用するのでこれが必要です。
構成は以下のdocker-compose.ymlで定義します。

上のファイルをいくつかに分けて説明していきます

以下の記述はdocker-composeの記法のバージョンを表しています。
今回はバージョン3を利用します。

以下の「services:」の記述は利用するイメージとその設定の諸々を指定しています。
イメージのバージョンは、今回はプロジェクトに合わせmysqlの5.7、railsの4.2.5.1に指定します。railsのバージョンは「build: .」という記述により以下で説明するDockerfileで指定されます。
あとはコード内に細かな解説を載せます。
同じ構成のアプリケーションの環境構築したことのある方には見覚えのある項目も多いかと思います。

以下の「volumes:」の記述は、「services:」に登場する「volumes:」で必要になります。
mysql_dataとvendor_bundleの2つがあります。この目的は以下のとおりです。

1. mysql_data: MySQLが持つデータを、コンテナの外側に置くため
2. vendor_bundle: 「bundle install」で生成されるファイルをコンテナの外側に置くため

Dockerfile作成

以下のDockerfileはrailsのコンテナをビルドを定義しています。
上のdocker-compose.ymlに、「build: .」と書いてあるので、Dockerfileを読み込むことになります。

ビルド及び起動とデータ投入

以下のコマンドで、イメージをビルド、及びコンテナを起動できます。

コンテナが起動したら、別のターミナルを開き、以下のコマンドを叩くことでdbへのデータを投入します。
(db:createが必要ないのは、ビルド時点でデータベースが作成されているため)

ブラウザから「https://localhost:3000/」にアクセスするとアプリケーションが起動していることが確認できるでしょう。

ちなみに、

で起動中のコンテナのIDの一覧を表示できます。
このコマンドで調べたIDを上の<対象のコンテナID>に入れましょう。

まとめ

いかがでしたでしょうか。
docker-composeを利用したmysqlコンテナとrailsコンテナの連携起動の方法を説明いたしました。
最初の環境構築は手間取ることもありますが、今後は他の作業者が同様の環境を用意するのには10分もかからないでしょう。
dockerおすすめです。