buildpackを使ってアプリを
載せるためのアプローチ
自己紹介
名前: morika-t
仕事: Cloud Founrdy関連
最近のCF的興味:
Diego(DeaまわりのGo実装)
Buildpack周り
pivotalも最近力をいれており
buildpackチームが作られたので動向が気になる所
Cloud Foundryのアーキテクチャ
http://docs.run.pivotal.io/concepts/architecture/
CFとherokuの構成
DEA
コンテナ
(Warden)
RouterRouter
コンテナ
(Dyno)
APP APP
Cloud Foundry heroku
Cloud Foundryを使うには(v2)
方法
1. Publicにサービス展開されているCloud FoundryのPaaSを使う
2. cf_nise_installer(Iwasaki Yudai氏のツール)を使う
a. https://github.com/yudai/cf_nise_installer
b. 基本1VMはcoreのみ4~8GBもあれば十分
c. 手軽に使える為、非公式ながら人気が高い
3. BOSH-lite(公式推奨)
a. Vagrant環境VAGRANT上に6GB以上のメモリを要求する為気軽に試
すのには向いていない
b. Cloud Foundryの公式ではBOSH(BOSH-liteのマルチノード構成)の
ものを使用しているがBOSHを使う為だけにVMがいくつも必要になり手
軽でない
アプリ開発者にとっての
Cloud Foundry&BOSH
https://flic.kr/p/9qmqeh
Cloud Foundryのv2になって
herokuと同じ
buildpackが入った!
アプリを載せるのが
簡単になるはずだった。。。
現状のCloud Foundryの現実
● buildpackになっても
○ ちょっと直して動かすがやりにくい
○ buildpackそのもののエラー落ちやアプリ起動時のログが拾いにくい
● 少なくともアプリ開発者にとって
○ ccngやrouterなどは開発者にとっては必須ではないい
■ 複数インスタンスの試験が必要でない限り
○ deaとwardenだけで動ける方が幸せそう
■ リードエンジニアさん曰く将来的には Diego(go実装版)等で改善されるらしい
○ 現状CFは外からSSHする手段がない。。。
■ Wardenのwshは出来るが、通常routerの外からはそのような手段が取れない
※前回の輪読会でその悩みの暫定解決法は紹介済
現状のCFの
PaaSの恩恵を受けるまでの状態
httpshttps://www.flickr.
com/photos/the_3rd_place/4853328
408/in/photostream/://www.flickr.
com/photos/the_3rd_place/4853328
408/in/photostream/
https://flic.kr/p/8r9kdJ
buildpack
● buildpackとは
○ 元々はherokuで使われていた
○ Cloud Foundryの場合
■ DEA上のWardenコンテナの中でユーザのアプリが pushされたものを組み立てるのに使う
○ 3つのフェーズが存在
■ detect
● 『このファイルがあったらこの buildpackです!』と紐づける
■ compile
● javaのwebアプリなどはtomcatをどこかから持って来たりする処理が書かれている
● 運営者側でbuildpackキャッシュにファイルを置いておけば高速化出来る
■ release
● 環境変数のPATH等の設定
● Procfileの設定等(-c相当でstartコマンドを決める)
■
● 参考資料
○ はじめてのCF biuldpack
■ http://www.slideshare.net/jacopen/cf-buildpack
『buildpackを使っている』
という事は?
『buildpack向けのツールの
恩恵が受けられる』ということ
最近では
『Immutable Infrastructure』
というキーワードが流行ってきており
『Docker』
という便利なツールも使える為、PaaSに取って良い方向性に
簡単にbuildpackを試す環境を作りたい
そういったニーズから
いくつか似たアプローチのツールが登場
1. dokku(buildstep)
2. building
3. docker-paas-example
Dokku(buildstep)
● buildstepとdokkuとは
○ Jeff Lindsayさんという人が開発
○ 同じ人がFlynnという名称のPaaSを作成中(まだ開発中)
○ buildstep
■ buildpackを使ってDockerコンテナを作るスクリプト(ほぼほぼbash)
○ dokku
■ buildstep + git pushするとdockerコンテナを作ってくれる機能などが
存在
● 参考
○ http://qiita.com/hokaccha/items/af109d4037fa1d788617
試した結果
● flynn
○ 軽く試したけれどうまく動きませんでした。。。
● dokku
○ 安定的かというと難しい所ですがplugin拡張なども出来
postgresqlなども使える『mini-heroku的』な存在
■ https://github.com/progrium/dokku/wiki/Plugins
● buildstep
○ 簡単にbuildpackを使うには割と便利(後程デモします)
building
● buildingとは
○ Cloud FoundryのAppFog運営元?のCenturyLinkLabsの作ったrubyの
gem
○ github上でも公開されている
○ こちらもdockerを使っていてbuildstepの+αくらいの位置づけ
■ buildstepのtarコマンド部分で固めたりする部分が簡略化されているらしい
○ 参考URL
■ https://github.com/CenturyLinkLabs/building
■ http://www.centurylinklabs.com/heroku-on-docker/
■ http://qiita.com/futoase/items/21167e9d064b0e336e8f
docker-paas-example
● docker-paas-example
○ Naoya Itoさんが作成
○ dokkuと同様な挙動でDocker+rubyで出来ている
○ Docker Meetup Tokyo #2向けに制作されたらしい
■ https://github.com/naoya/docker-paas-example
まとめ
● herokuのbuildpackと同じ仕組を使っていると同
じようなツールで恩恵を受ける事ができそう
● 個人的にはできればwardenもdocker位に楽に
使えるようになってほしい
● dokkuの人は元々Piston Cloudで
OpenStack+Cloud Foundryを使っていて構築
に時間がかかって苦労したという経験からflynn
等を作ったという経歴がなかなか興味深い存在
※http://wazanova.jp/items/985

第18回Cloud Foundry輪読会用 Buildpackを使ってアプリを 載せるためのアプローチ