Heroku Docker で Rails アプリを構築してみた
こんにちは、本間です。
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
無事、docker 環境でアプリが動きました!
docker release
最後作ったのを heroku にデプロイします。
heroku create
heroku docker:release
最後に
いかがでしたでしょうか。 これの良いところは Rails 環境などローカルで作らずとも docker 環境内で整備されたのを動かしているという点だと思います。開発メンバーが増えて行った際にきちんとdocker環境を作ることで安全に開発できると思います。
今まで chef や vagrant で作ってた方もこちら検討してみてはいかがでしょうか。弊社でも heroku docker での環境構築について引き続き調査してまいります。