dokkuを普段持ち歩いてるMacbook AirのVirtualBoxのUbuntu12.04に入れた。

dokkuはDockerの上にHerokuのようなものを建立してくれるもので、dokku本体は100行ぐらいのshellscriptで実装されている。dokkuから作者のprogrium氏が作った色々なツールが呼び出されるので、実体としてはもっと大きいけど。

vagrantとかchefとか全く使わずに、アプリをgit pushするとVMが建つ環境が簡単に作れる。
gitのhookでdockerコンテナが作られて、フロントのnginxがproxyしてくれる。websocketも通る。
コンテナ構築にはherokuのbuildpackが使われているので、アプリの内容に応じて自動的にnodeとかrubyとかの環境がセットアップされる。

家のMacMiniにも似たようなセットアップをして、自宅をmini heroku化もできた。そっちの設定はまたあとで書く。


参考になる


なんだかんだでぐぐる前にgithubにあるREADMEちゃんと読むのが一番参考になる


Ubuntuインストール

Mac OSX上のVirtualBoxに、ubuntu12.04 64bit serverを入れた。
2014年4月11日現在、ubuntu 13系+dockerの組み合わせでデッドロックしたりコンテナが止まらなかったりするらしい。

% sudo apt-get install openssh-server
% sudo apt-get install python-software-properties # 12.04だと必要

インストール時のオプションは全部デフォルトのままでよい。

自分のMacからは、Ubuntuが 192.168.56.103 として見えるようになった。(ホストオンリーアダプタを使っている)
普通にNATとかブリッジアダプタとかでもいいし、ネットワークは好きに設定すればいい。



dokkuインストール

安定版を入れた。

Ubuntuで
% wget -qO- https://raw.github.com/progrium/dokku/v0.2.2/bootstrap.sh | sudo DOKKU_TAG=v0.2.2 bash
dokkuというユーザーが増えて、dockerやnginxなどが入る。


ssh鍵のインストール

ubuntuインストール時に作った普通のユーザーと、dokkuというユーザーそれぞれに同じ鍵をインストールした

Macから
% brew install ssh-copy-id
% ssh-copy-id -i ~/.ssh/id_rsa.pub sho@192.168.56.103

sshでubuntuに入ってから
% cat ~/.ssh/authorized_keys | sudo sshcommand acl-add dokku shokai
/home/dokku/.ssh/authorized_keys に書き込まれる。


ホスト名の設定

Ubuntuに /home/dokku/VHOST を作り、
dokku.192.168.56.103.xip.io
を書いた。

dokkuのnginxはリクエストのホスト名のサブドメイン部分でどのアプリケーションへのリクエストなのかを判別して振り分けるので、IPアドレスではなくドメイン名でアクセスできるようにしなければならない。

xip.ioを使うとサブドメイン部分をそのまま返してくれるのでLAN内のマシンにドメインが振られてるように見せかけられる。


ちゃんとグローバルIPでドメイン名ある環境だったら、xip.ioは必要ない。


デプロイする

試しにHerokuのnodejsサンプルをデプロイしてみる。

Macから
% git clone git@github.com:heroku/node-js-sample.git
% cd node-js-sample
% git remote add dokku dokku@dokku.192.168.56.103.xip.io:node—js-sample
これは
git remote add リモート名 dokku@ホスト名:アプリ名
という事。


git pushでデプロイする
% git push dokku master
成功すると、Herokuにデプロイした時と同じようにNode環境が作られてるログが流れて、
http://node-js-sample.dokku.192.168.56.103.xip.io
で起動する。



試しにsocket.ioでwebsocketを使っているアプリもデプロイしてみたら、ちゃんとwebsocket proxy通った。

dockerを0.10から0.9に戻す

dokku v0.2.2は、docker 0.10だと動かない。
デプロイすると
Invalid namespace name (app), only [a-z0-9_]
というエラーがでて失敗する。

issueが立ってた。
Dokku 0.10.0: Pre-receive hook declined: Invalid namespace name (app) · Issue #533 · progrium/dokku
docker 0.10からnamespaceが4文字以上必要に変更されたが、dokku v0.2.2が作るコンテナはappというnamespaceを使おうとするので失敗する。

とりあえずdockerを0.9.0に落とせば動くので、Ubuntuで
% sudo apt-get remove --purge lxc-docker
% sudo apt-get install lxc-docker-0.9.0

これでMacからgit pushしなおしたらデプロイ通った。


コンテナの管理

dockerコマンドとdokkuコマンドを併用する。

Ubuntuで
コンテナ一覧
% sudo docker ps

アプリの削除
% sudo dokku delete アプリ名

詳しくはgithubのREADMEの下の方に書いてある