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


関連記事

icon

ブログ運営で最も気をつけること(障害報告)

1 お詫び2 障害報告書2.1 障害内容2.2 障害期間2.3 障害の原因2.4 障害の長期化の原因2.5 詳細3 対応3.1 決済に使用するクレジットカードを変更する3.2 一つ前のOSバージョンで ...

mkcertで簡単にオレオレ証明書を発行する

1 はじめに2 前提3 mkcert3.1 概要3.2 インストール3.3 証明書作成3.4 証明書設置と設定3.5 接続確認4 さいごに5 おすすめ書籍 はじめに ローカルのwebサーバにhttps ...

InnoDBでauto_incrementの値が戻る?

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

Python(bottle)をApacheで動かす

1 はじめに1.1 環境2 サーバーの立ち上げ3 Pythonのインストール3.1 IUS Community Project の yum リポジトリ3.2 インストール4 Apacheのインストール ...

MyCoachのDocker環境を変えてみた

1 はじめに2 なんで改修しようと思ったか3 構成3.1 使用するコンテナ3.2 各Dockerfile3.3 docker-compose.yml3.4 Unicorn3.5 database.rb ...

フォロー

follow us in feedly

page_side_300rect

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

アプリ情報

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