はじめに
みなさん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した場合は残りの%表示されるので、先に取得しておくといいかと思います。
ホスト名でアクセスするようにする
今回は手軽に動かすことを説明するのが目的なので、別途DNSサーバーを建てないで/etc/hostsに書きます。
外部に公開して使う場合はDNSサーバーの設定が必要になります。
/etc/hosts
192.168.96.48 dokku sample.dokku
ipアドレスのところはDokku Alternativeを動かしてるホストのipアドレスを指定します。
デプロイ
今回はHerokuのrailsのサンプルアプリを動かしてみます。
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
アプリ用のデーターベースを作成してリンクします。
動かす
最後に
Dokku Alternative使うと、サーバー構築、設定する手間が少なくなるのと、デプロイする仕組みが簡単に実現できてしまうのが便利でした。
このエントリーに対するコメント
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
- トラックバック
「いいね!」で応援よろしくお願いします!