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


関連記事

WordPressのサーバ移設とnginxで無料SSLをやってみた

1 はじめに1.1 環境2 サーバー準備2.1 ConohaのVPSサーバーの契約2.2 sshログイン用のユーザーを作成2.3 必要なソフトウェアのインストール3 WordPressの移行3.1 D ...

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

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

MySQL 5.7 オプティマイザの改善〜UNION ALL〜

1 はじめに2 「UNION」と「UNION ALL」の違い3 MySQL 5.7での「UNION ALL」の改善とは4 MySQL 5.7での実行計画4.1 UNION ALL実行計画4.2 UNI ...

Docker上でTensorFlowのチュートリアルをやってみた

1 はじめに1.1 環境2 TensorFlowのコンテナを起動する3 チュートリアルをやってみた3.1 ソースコード4 さいごに はじめに こんにちは、最近個人的な勉強でPython、ディープラーニ ...

aws

Amazon EC2を使ってみる

1 はじめに2 事前準備2.1 ルートアカウントのMFAを有効化2.2 個々のIAMユーザの作成(及びグループの作成)2.3 IAMユーザのMFAを有効化2.4 IAMパスワードポリシーの適用3 EC ...

フォロー

blog-page_side_responsive

2017年3月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

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