DockerでミニHeroku!「Dokku」をさくらのクラウドで試す

シンプルなPaaSで知られるHerokuは使っていますか?ちょっとしたWebアプリを作って試すには便利ですが、もっとマシンパワーが必要になったり、もっと自由に使ってみたいと思うこともあるでしょう。

そんな要望を叶えるためのソフトウェアがDokkuです。DockerをベースにしたHerokuクローンになります。Dockerなので任意のクラウド、VPSサーバ上に立てることができます。今回はさくらのクラウドを使ってDokkuを実行する手順を紹介します。

さくらのクラウドでUbuntuサーバを立てる

追加をクリックします

DokkuはUbuntu 12.04 x64または14.04 x64をサポートしています。LTSとは言え、ここは14.04を選択することとします。アーカイブにUbuntu Server 14.04 LTS 64bit(基本セット)が登録されていますので、ここから選ぶだけでOKです。

Ubuntu Server 14.04 LTS 64bit (基本セット)を選択してください

後は公開鍵を登録して、サーバを起動します。数分でサーバが立ち上がるはずです。

Dokkuをインストール

サーバが立ち上がったらSSHでログインします。公開鍵を登録してあるので、

$ ssh ubuntu@server_ip_address

でログインできます。server_ip_addressは適宜読み替えてください。サーバにログインしたら以下のコマンドを実行します。

$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.3/bootstrap.sh | sudo DOKKU_TAG=v0.2.3 bash

なお、なぜか1回ではうまくいかず、2回実行するとセットアップが完了しました。

アドレスを決める

Dokkuではapp1というアプリをデプロイすると、http://app1.example.com といった感じでサブドメインで動くようになります。そのため、予めドメインを決めておく必要があります。設定は、 /home/dokku/VHOST を書き換えれば良いので、例えば dokku.moongift.jp を使うとすれば、

# echo "dokku.moongift.jp" > /home/dokku/VHOST

のように設定します。

公開鍵を設定する

リポジトリへアクセスするための公開鍵を設定します。GitHubでアカウントを持っているのであれば、docker - Dokku 入れた && モリモリ使える感じにした - Qiitaで紹介されている方法を使うのが便利です。

# curl https://github.com/GITHUB_USERNAME.keys | sudo sshcommand acl-add dokku DESC

GITHUB_USERNAMEは自分のユーザ名を、DESCは適当な説明を指定します。

ここまでで準備は完了です。

nodeアプリをデプロイしてみる

ではデモをしましょう。ここではheroku/node-js-sampleを使ってみます。以下は自分のローカルでの操作です。

$ git clone git@github.com:heroku/node-js-sample.git
$ cd node-js-sample
$ git remote add progrium dokku@server_address:node-js-app
$ git push progrium master

server_address は先ほど VHOST に指定したアドレスを指定してください。pushすると自動的に /home/dokku 以下にGitリポジトリが作られ、デプロイされます。ログは以下のようになります。

$ git push progrium master
Counting objects: 378, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (304/304), done.
Writing objects: 100% (378/378), 209.77 KiB | 0 bytes/s, done.
Total 378 (delta 45), reused 378 (delta 45)
-----> Cleaning up ...
remote: Cloning into '/tmp/tmp.NO73c0jCC6'...
-----> Building node-js-app ...
remote: warning: You appear to have cloned an empty repository.
remote: done.
remote: HEAD is now at 97a7c5c... wording
       Node.js app detected
-----> Requested node range:  0.10.x
-----> Resolved node version: 0.10.30
-----> Downloading and installing node
-----> Writing a custom .npmrc to circumvent npm bugs
-----> Installing dependencies
       express@4.8.3 node_modules/express
       ├── utils-merge@1.0.0
         :
       └── send@0.8.1 (ms@0.6.2, mime@1.2.11, finished@1.2.2)
-----> Caching node_modules directory for future builds
-----> Cleaning up node-gyp and npm artifacts
-----> No Procfile found; Adding npm start to new Procfile
-----> Building runtime environment
-----> Discovering process types
       Procfile declares types -> web
-----> Releasing node-js-app ...
-----> Deploying node-js-app ...
=====> Application deployed:
       http://node-js-app.dokku.moongift.jp

To dokku@dokku.moongift.jp:node-js-app
 * [new branch]      master -> master

デプロイしたら、表示されているURLにアクセスできるようになります。

見事実行されました!

Docker

アプリがデプロイされているのはdockerコマンドで確認できます。

$ sudo docker ps
CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS              PORTS                     NAMES
e1cdd1502e87        dokku/node-js-app:latest   /bin/bash -c '/start   2 hours ago         Up 2 hours          0.0.0.0:49153->5000/tcp   suspicious_nobel 

イメージも確認できます。

$ sudo docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
dokku/node-js-app    latest              780d7dcbbb19        2 hours ago         885.3 MB
progrium/buildstep   latest              47f25c200541        2 hours ago         866.4 MB

デプロイするアプリ単位でDockerコンテナが立ち上がる形になっているのが分かります。これによりセキュアでリソースが適切に管理された状態で運用ができるようになっているのが分かりますね。

まとめ

現在のところ、Node/Ruby/Pythonを基本としつつ、Heokuのbuildpackに対応しているのでJava/Scala/Clojure/Gradle/Grails/PHP/Go/Meteor/Perl/Dartなど多彩な言語をデプロイできるようになっています。Heroku向けに作ったWebアプリケーションがそのまま使えるのも利点です。

GitリポジトリをpushするだけでデプロイしてWebサーバが立ち上がるところまでできてしまうのが良いです。さらにHerokuと違ってサブドメインが分かりやすいので管理がしやすいかと思います。ただし管理画面などはありませんので注意してください。

自由に使えるPaaS(Platform as a Service)が簡単に実現できてしまうDokku、ぜひさくらのクラウドと一緒に試してみてください。

progrium/dokku

おしらせ