Article

ブログ

2015/06/13

Heroku Docker で Rails アプリを構築してみた

docker

こんにちは、本間です。

Heroku Docker が実験としてリリースされ、Heroku アプリ開発の仕方が変わっていくのではないか、と話題になっています。もう既に触れられる状態でしたのでレポートします。

なお、基本的にこの記事は上記リンクの内容(英語)に従って構築したレポートと所感となります。

heroku docker はまだ実験段階の機能であり、以下のフローは参考程度にしていただき、詳細は最新のドキュメントを参照してください。

Heroku Docker だと何が嬉しいのか

今までのHerokuアプリ開発は、ローカルで自分で構築するか、vagrant , chef などを使って環境を作っていました。それがheroku公式で環境構築できるツールを提供してくれた、といったところだと感じています。

より安全にチームでローカル開発環境を統一してherokuアプリを作りたいという場合に有効ではないでしょうか。私自身まだ触りたてですので、今後他にも良いところがあればレポートしていきます。

ローカル環境構築

Boot2docer のインストール

本当に初めてDocker を触るため、Boot2dcoker からインストールしていきます。

Boot2docker を起動し、そのターミナル内でインストールできたか確認します。

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Heroku プラグインをインストール

最近の heroku コマンドはgem経由からではなく、 heroku toolbelt と呼ばれるアプリから実行するように変わったようです。 gem の heroku は deprecated となっていました。ここでプラグインをインストール。

$ heroku plugins:install heroku-docker
$ heroku docker 
0.0.23

Ruby 用 docker getting started

git clone します。

$ git clone https://github.com/heroku/ruby-getting-started.git
$ cd ruby-getting-started
$ heroku docker:init
$ heroku docker:start

...
web process will be available at http://192.168.59.103:3000/

何か動いたようです。アクセスするとno database と怒られます。

Ctrl+Cで閉じて、.envを作成し、DATABASE_URL をセットします。これは heroku アプリなら環境変数にある値ですね。今回は以前適当に作ったherokuアプリのheroku postgres の URL に向き先にしました。適当なアプリでheroku config と打てば参照できます。

DATABASE_URL=postgres://

環境変数を読ませるためもう一度 heroku docker:start とします。

rake db:migrate するために別ターミナルで、以下を打ちます。

$ docker ps
silly_curie   
$ docker exec silly_curie bundle exec rake db:migrate

screen

無事、docker 環境でアプリが動きました!

docker release

最後作ったのを heroku にデプロイします。

heroku create
heroku docker:release

最後に

いかがでしたでしょうか。 これの良いところは Rails 環境などローカルで作らずとも docker 環境内で整備されたのを動かしているという点だと思います。開発メンバーが増えて行った際にきちんとdocker環境を作ることで安全に開発できると思います。

今まで chef や vagrant で作ってた方もこちら検討してみてはいかがでしょうか。弊社でも heroku docker での環境構築について引き続き調査してまいります。