Server

DockerのQuickstart:Compose and Railsをやってみた

投稿日:2017年3月12日 更新日:

はじめに

Dockerを触る機会ができたため、この機に勉強をしたいと思います。
DockerにはRailsプロジェクトを開始するチュートリアルがあったので、今回はそちらをやってみたいと思います。

Quickstart: Compose and Rails

環境

  • Mac OS X Yosemite 10.10.5

Docker for Macのインストール

今ではDockerもMacOSにインストールできるのですね。
まずはこちらからDocker for Macをインストールします。

Install Docker for Mac

特に変わった使い方をしたいわけではないので、Stable channel(安定版)を入手します。
基本的なコマンドはこちらで説明があります。

Get started with Docker for Mac

インストールしたDockerを起動し、下記コマンドで確認します。

Railsプロジェクトを作成するまで

Railsのプロジェクトディレクトリの作成

まずはディレクトリを作成します。
今回はdocker_railsという名前のプロジェクトにしたいと思います。

Dockerfileの作成

Dockerイメージを作成するためのDockerfileをつくります。
今回はRubyの2.4.0を使用します。

FROMでRubyのイメージから取得します。
DockerにあるRubyのイメージを見てみると、2.4.0があることが分かります。

公式リポジトリ -ruby-

Gemfileの作成

RailsをロードするためのGemfileを作成します。
後ほど実施するrails newの際に書き換えられます。
今回のRailsは5.0.2を使用したいと思います。

Gemfile.lockの作成

空のGemfile.lockを作成します。
Dockerをビルドする際に必要なようです。

docker-compose.ymlの作成

docker-composeは複数のコンテナを1つのyaml形式ファイルで管理できるようになります。

Docker Compose

imageでもととなるDockerイメージを指定します。

Quickstart: Compose and RailsではデータベースにPostgreSQLを使用していますが、今回はMySQLを使用したいと思います。(このままではうまくいかないので、修正は後述します。)

Railsプロジェクトの作成

ここまでで、4つのファイルができました。
rails newをして、プロジェクトを作成したいと思います。

データベースはMySQLにしたいので、--databaseオプションはmysqlにします。

このコマンド実行後、見慣れたRailsのフォルダ構成ができあがります。

docker-compose build

Linux OS上にDockerを作成した場合はここでパーミッションの確認をするようですが、今回はMacなので省略します。

必要に応じてGemfileを修正し、ビルドします。
(ここではGemfileはデフォルトのままです。)

Railsのdatabase.ymlを修正

データベースの接続設定をするため、database.ymlを修正します。
デフォルトだとプロジェクト名のデータベースが作成されます。

DockerコンテナのMySQLはlocalhostではないため、docker-compose.ymlでつけたサービス名で指定します。

docker-compose up

それでは起動させてみます。

すると、下記のようなエラーメッセージがでます。

webの方はチュートリアル通りになりましたが、データベースの方がエラーになっています。

パスワードが設定されていないためにエラーになっているようです。
(確かにMySQLを普通にたてるとき、はじめにrootパスワードを設定していたような気がします。)

MySQLのrootパスワードを設定

とりあえず、起動しているWebサーバーをCtrl + Cで停止します。

docker-compse.ymlで環境変数を設定することができます。
要求されているMYSQL_ROOT_PASSWORDを設定します。

または、

として、空のパスワードを許可します。

今回はrootパスワードを設定しました。
Railsのdatabase.ymlも修正します。

再度、docker-compose up

再度、docker-compose upをします。
時間がかかりますが起動しているはずです。

ただ、このままhttp://localhost:3000にアクセスしてもデータベースが作成されていません。

そのため、ターミナルをもう1つ立ち上げ、マイグレーションを走らせます。

これでhttp://localhost:3000にアクセスすればウェルカムページが表示されるはずです!

起動しているコンテナの確認

下記コマンドで起動しているコンテナの確認できます。

一番右のNAMESがコンテナの名前です。
試しにMySQLコンテナに入って、MySQLのバージョンを確認してみます。

docker exec -itで入ります。

これでコンテナの中に入れます。
dockerrails_db_1の部分でコンテナを指定しています。
Railsのコンテナに入る場合も同様です。

さいごに

「A server is already running.」というエラーが出た場合

チュートリアルの最後にも記載されておりますが、下記のようなエラーがでる場合があります。

この場合はRailsのtmp/pids/server.pidを消せば良いようです。

私が使っていた感じですが、Dockerが落ちた後などに発生しているような気がしております。
そのため、終了する際は必ずCtrl + Cで消しておいた方が良さそうです。

Kitematicについて

DockerをGUIで操作できるツールです。

KITEMATIC BY DOCKER

私も使っておりますが、docker execなどを使用できます。
記事としては、次回にしたいと思いますが、興味がある方はぜひ使ってみてください!

page_footer_300rect




page_footer_300rect




-Server
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

aws

EC2インスタンスのメモリとディスクのメトリクスモニタリングでハマったこと

1 はじめに2 メモリとディスクのメトリクスモニタリング3 ハマりポイント4 対応方法5 さいごに はじめに AWSのEC2インスタンスでディスク容量やメモリの使用率をCloudWatchで監視をする ...

CentOS6のLAMP環境でTLS1.2対応

1 はじめに2 業界団体レベルでのTLS1.2移行3 構成4 ssl.confを編集する5 ジェネレータ任せでOK6 設定変更の影響7 さいごに はじめに ものすごくひさしぶりにLAMP環境のSSL設 ...

単体のORMライブラリとしてEloquentを使う

1 はじめに2 Eloquentとは3 導入3.1 Composerインストール3.2 Eloquentインストール4 DB接続4.1 illuminate/database4.2 モデルクラス作成4 ...

InnoDBでauto_incrementの値が戻る?

はじめに 花粉症が辛い季節になりました。 花粉症も困りますが、本日はMySQL関連で困って調べたことをまとめたいと思います。 タイトルですが、InnoDBだとDBを再起動した際にauto_increm ...

CentOS7でwebサーバの初期設定

1 はじめに2 設定内容3 必要なパッケージをインストール3.1 まずはカーネルその他諸々アップデート3.2 dnf4 SSH設定4.1 ユーザー作成・設定4.2 ローカル側で鍵作成4.3 サーバにア ...

フォロー

follow us in feedly

page_side_300rect

2017年3月
« 2月   4月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。

Web版MyCoach

私たちはより広い方にコーチングを知ってもらいたいと考えています。 下記のサイトにて、コーチの方々を紹介しておりますので、よろしければご覧ください。