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などを使用できます。
記事としては、次回にしたいと思いますが、興味がある方はぜひ使ってみてください!

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:


comment

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

CAPTCHA


関連記事

InnoDBでauto_incrementの値が戻る?

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

Google

【Google Invisible reCAPTCHA】Railsサイトにキャプチャ導入

1 はじめに2 reCAPTCHAとは3 Site keyとSecret keyの取得4 Rails gemの導入5 サイトへの組み込み6 さいごに はじめに こんにちは、最近休みなく仕事をいただいて ...

RubyでOSM Nominatimを使ってみた

1 はじめに2 導入3 検索3.1 建物名による検索の実装例3.2 住所による検索の実装例4 リバースジオコーディング4.1 実装例5 住所の整形6 Open Street Map Nominatim ...

https-portalで既存のdocker環境をhttps化

1 はじめに2 https-portalとは3 設定ファイル3.1 docker-compose.yml3.2 default.conf4 説明4.1 docker-compose.yml4.2 de ...

配牌からアガれるかアガれないか予測する

1 はじめに1.1 趣旨1.2 筆者のスペック1.3 環境1.4 機能概要2 実装に関して2.1 教師データ2.2 前処理2.3 各ノードの重みの学習3 実際に使ってみた3.1 再テスト4 学習させた ...

フォロー

follow us in feedly

blog-page_side_responsive

2017年3月
 1234
567891011
12131415161718
19202122232425
262728293031 

アプリ情報

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