Herokuのように簡単に使えるDockerベースのPaaS このエントリをはてなブックマークに登録

2014年10月02日

ダニーダニー

dokku-deploy

はじめに

みなさんDocker使われてますでしょうか?
自分はDockerをよく使ってるのですが、使ってるうちにいろいろと不満が出てきました。

  • デプロイスクリプトとか書かないでデプロイしたい
  • Dockerfileを書くとメンテしないといけなくなるので、書かないで使いたい
  • 組織とかで使う場合に、それぞれが各々のDockerfileを書くことになるので、一貫性を保つのが難しい
  • Docker単体だとImmutable Infrastructureの仕組みを自前で作らないと実現できない
  • あんまり設定とかしなくてもRailsアプリケーションが、すぐ動かせる環境を構築したい

要するにHerokuのようなPasSを開発サーバーに建てることができればいいなと思ってたわけです。
そこでDockerベースのHerokuのようなPaaSを実現できるDokkuを試してみました。
先日DokkuをフォークしたDokku Alternativeを見つけて試してみたら、Dokkuよりもいろいろな機能が追加されてて良かったので、今回はDokku Alternativeを紹介します。

Dokku Alternativeとは

Dokkuにない機能がいろいろと入ってて使いやすいです。

個人的にいいと思ったのは以下です。

  • 特定のユーザにデプロイのみを許可できる
    • 業務で使う場合に、担当してるメンバーのみにデプロイ権限を許可したい場合があります。
  • データーベースのプラグインがデフォルトで入っている
    • DokkuのデフォルトだとDB関係のプラグインが入ってなくて、別途インストールする必要があります。
    • Dokkuを試してた時にdokku-mysql-pluginを入れて試してみたのですが、うまく動きませんでした。
  • ダウンタイムなしでデプロイできる
    • Dokkuの方も最近できるようになったみたいです。

詳しくは以下を参照下さい。

https://github.com/dokku-alt/dokku-alt

セットアップ

sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/dokku-alt/dokku-alt/master/bootstrap.sh)"

今回はUbuntu 14.04にセットアップしました。

イメージの取得

sudo docker pull ayufan/dokku-alt-buildstep
sudo docker pull ayufan/dokku-alt-postgresql

pullして置かなくても、デプロイ時にイメージが取得されますが、容量が多いのとdocker pullした場合は残りの%表示されるので、先に取得しておくといいかと思います。

ホスト名でアクセスするようにする

鍵の設定と、ホスト名の設定をします。
dokku-setup

今回は手軽に動かすことを説明するのが目的なので、別途DNSサーバーを建てないで/etc/hostsに書きます。
外部に公開して使う場合はDNSサーバーの設定が必要になります。

/etc/hosts

192.168.96.48 dokku sample.dokku

ipアドレスのところはDokku Alternativeを動かしてるホストのipアドレスを指定します。

デプロイ

今回はHerokuのrailsのサンプルアプリを動かしてみます。

heroku/ruby-rails-sample

git remote add dokku dokku@dokku:sample-app
git push dokku master

リモートのマシンにリポジトリを追加してpushするとデプロイされます。

Rubyが取得されなくて、デプロイが止まってしまう対策

デプロイしているとたまに以下のエラーでデプロイできない時があります。

-----> Compiling Ruby/Rails
 !
 !     Command: 'set -o pipefail; curl --fail --retry 3 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/ruby-2.1.2.tgz -s -o - | tar zxf -' failed unexpe
ctedly:
 !
 !     gzip: stdin: invalid compressed data--format violated
 !     tar: Unexpected EOF in archive
 !     tar: Unexpected EOF in archive
 !     tar: Error is not recoverable: exiting now
 !
Killed by signal 1.

これはDokku Alternativeの問題ではなくて、heroku-buildpack-rubyがs3から取得する時にタイムアウトしてデプロイできなくなってしまうので、タイムアウト時間を長くします。

dokku config:set sample-app CURL_TIMEOUT=120

データーベースのセットアップ

dokku postgresql:create sample-db
dokku postgresql:link sample-app sample-db

アプリ用のデーターベースを作成してリンクします。

動かす

sample-app

最後に

Dokku Alternative使うと、サーバー構築、設定する手間が少なくなるのと、デプロイする仕組みが簡単に実現できてしまうのが便利でした。

クレイについてもっと知りたい方は…

  1. クレイの3つの強みを見てみる。
  2. WEBシステムのことなら何でもご相談ください。

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

コメントはまだありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


トラックバック

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ