Docker/Droneを試してみる
:D な会社の友達たちが「いみゅーたぶるいんふらなんちゃらの合宿やるわー」って話してたので、そんな面白いことはぜひ外部からの参加も可能にするべきだ!って憤慨しながら突っ込んだら「くればおk」って言ってくれたので合宿参加しました。
概要はこんな感じ
Immutable Infrastructure 的ななにかをやる キーワード ・Vagrant ・Docker ・Mesos ・Serf ・Sensu ? ・Jenkins ・とかとか やること ・上のキーワードをてきとうに組み合わせるとなにかおもしろいの出てくるかも ・Jenkins × Docker とか ・Mesos × Vagrant とか ・ただ触ってみるだけでも良いとおも
主催者の @sonots さんは上記のような概要書いたくせに全然関係ないfocuslight(の主にドキュメントページ)をやってた
僕は、とりあえずdockerだけ予習してから参加した。 (ちなみに実家から母が来てたんだけど、いろいろあってリスケとかしてもらったのもあって妻にまるなげして参加した。なので、帰りにヒカリエでケーキ買って帰った)
やろうと思ってたこと
- focuslightのRRDToolのAPIからデータを抜いてD3化→brew installできなかったのでやめた
- droneを試す→まあ、動いた。gitlabとか追加できるようにコードを読み漁ってたところで終わり
focuslight
Warning: No developer tools installed. You should install the Command Line Tools. Run `xcode-select --install` to install them. ==> Downloading http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/1.38/gobject-introspection-1.38.0.tar.xz Already downloaded: /Library/Caches/Homebrew/gobject-introspection-1.38.0.tar.xz ==> ./configure --prefix=/usr/local/Cellar/gobject-introspection/1.38.0 ==> make ./g-ir-scanner: line 29: ` def on_exception(exctype, value, tb):' make[2]: *** [GLib-2.0.gir] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2 READ THIS: https://github.com/mxcl/homebrew/wiki/troubleshooting /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:277:in `open_http': 404 Not Found (OpenURI::HTTPError) from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:616:in `buffer_open' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:164:in `open_loop' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:162:in `catch' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:162:in `open_loop' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:132:in `open_uri' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:518:in `open' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:26:in `open' from /usr/local/Library/Homebrew/utils.rb:264:in `open' from /usr/local/Library/Homebrew/utils.rb:281:in `each_issue_matching' from /usr/local/Library/Homebrew/utils.rb:293:in `issues_for_formula' from /usr/local/Library/Homebrew/exceptions.rb:178:in `issues' from /usr/local/Library/Homebrew/exceptions.rb:209:in `dump' from /usr/local/Library/brew.rb:118
このあと、mac os xのboot2docker使って ubuntuにrrdtool入れようとしたけど、それでもこけてたので、時間もったいないし辞めた
drone
- awsでEC2借りる ubuntu
- http://yosssi.hatenablog.com/entry/2014/02/08/161500 の通りにやって問題ない
- secure-groupの変更で80と4243をあける 参考
- エラーが出る(4243)
docker daemonが必要らしい
- 参考
sudo sudo docker -H 0.0.0.0:4243 -d
sudo DOCKER_HOST="tcp://localhost:4243" start drone
わーい
ログ
/var/log/upstart/drone.log
droneのsqlite3
/var/lib/drone/drone.sqlite
ubuntu@~$ sqlite3 /var/lib/drone/drone.sqlite SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables builds members repos teams commits migration settings users sqlite>
table
table | 備考 |
---|---|
builds | ビルドのログが入っている。stdoutの中に全文保持 |
members | 所属チームと役割を保持 |
repos | リポジトリ設定 |
teams | チーム設定 |
commits | リポジトリのコミットログを保持 |
migration | よくわからない |
settings | drone自体の設定 |
users | ユーザ |
- users
table|users|users|2|CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT ,email VARCHAR(255) UNIQUE ,password VARCHAR(255) ,token VARCHAR(255) UNIQUE ,name VARCHAR(255) ,gravatar VARCHAR(255) ,created TIMESTAMP ,updated TIMESTAMP ,admin BOOLEAN ,github_login VARCHAR(255) ,github_token VARCHAR(255) ,bitbucket_login VARCHAR(255) ,bitbucket_token VARCHAR(255) ,bitbucket_secret VARCHAR(255) )
- teams
table|teams|teams|6|CREATE TABLE teams ( id INTEGER PRIMARY KEY AUTOINCREMENT ,slug VARCHAR(255) UNIQUE ,name VARCHAR(255) ,email VARCHAR(255) ,gravatar VARCHAR(255) ,created TIMESTAMP ,updated TIMESTAMP )
- members
table|members|members|9|CREATE TABLE members ( id INTEGER PRIMARY KEY AUTOINCREMENT ,team_id INTEGER ,user_id INTEGER ,role INTEGER )
- commits
table|commits|commits|13|CREATE TABLE commits ( id INTEGER PRIMARY KEY AUTOINCREMENT ,repo_id INTEGER ,status VARCHAR(255) ,started TIMESTAMP ,finished TIMESTAMP ,duration INTEGER ,attempts INTEGER ,hash VARCHAR(255) ,branch VARCHAR(255) ,pull_request VARCHAR(255) ,author VARCHAR(255) ,gravatar VARCHAR(255) ,timestamp VARCHAR(255) ,message VARCHAR(255) ,created TIMESTAMP ,updated TIMESTAMP )
- builds
table|builds|builds|15|CREATE TABLE builds ( id INTEGER PRIMARY KEY AUTOINCREMENT ,commit_id INTEGER ,slug VARCHAR(255) ,status VARCHAR(255) ,started TIMESTAMP ,finished TIMESTAMP ,duration INTEGER ,created TIMESTAMP ,updated TIMESTAMP ,stdout BLOB )
- migration
table|migration|migration|28|CREATE TABLE migration ( revision NUMBER PRIMARY KEY )
- repos
table|repos|repos|30|CREATE TABLE repos ( id INTEGER PRIMARY KEY AUTOINCREMENT , slug VARCHAR(1024) UNIQUE , host VARCHAR(255) , owner VARCHAR(255) , name VARCHAR(255) , private BOOLEAN , disabled BOOLEAN , disabled_pr BOOLEAN , privileged BOOLEAN , timeout INTEGER , scm VARCHAR(25) , url VARCHAR(1024) , username VARCHAR(255) , password VARCHAR(255) , public_key VARCHAR(1024) , private_key VARCHAR(1024) , params VARCHAR(2000) , created TIMESTAMP , updated TIMESTAMP , user_id INTEGER , team_id INTEGER )
droneとJenkinsの違いとかを考えながら触ってたんだけど、Jenkinsは「いまある環境+α」を検証するのには良いと思う。Docker / Vagrantでごにょごにょやってテストする、とかもいいと思うけど、droneは「(そもそも必要な依存関係とかを解決した)コンテナを用意して、その上でテストが必要なやつだけを検証する」のは非常に簡単だし、環境とアプリ・ライブラリのテストを完全に分離できるという意味で俺的エポックメイキングな感じでした。
会社でも使ってみたいと思います。
プロビジョニングとオーケストレーション
@sonotsさんからいろいろ聞きながらの自分の中の理解
- プロビジョニング:マシン単体における(アプリのインストールも含めた)設定の変更(初期化含む)
- オーケストレーション:機能を実現する、複数のマシン群の「台数」の変更(構成の変化は今後。例えばDBの水平分割に伴うディスパッチャー層の追加とか)
@sonotsさんまじニフティ
雑感
- @sonotsさん「Jenkinsみたいにslave/workerは使えるの?」→しらね
- @tohae さん「ぱーるかけちゃうからよくないわー」
とはえミサワ「perl 書けちゃうからよくないわー」
- @yosuke_furukawa さん → @takus さん 「なに勝手にご飯食べてるんすか?」
よーちゃそ「なに勝手にご飯食べてるんですかー?」#rogai
:Dの会社、怖い会社