最近妄想しているプライベートクラウドデプロイ環境
ただの愚痴です。しかも長い。
- 「そこら辺に転がって余っているサーバを自由に組み合わせてリソースをよしなに配分してスケールアウトできるdokku」みたいなプライベートPaaSほしい
- mesos-docker(mesos 0.19からは deimosというので組み込まれている)を使うとリソース配分はできそう
- 主にmarathonとzookeeperがなんとかしてくれる
- ただ、dokkuはbuildpack使っている分herokuみたいな感じになってしまっていてデプロイ時にややもすると遅い(無駄がある)気がする
- 例えば、bundle installはGemfile変更なければキャッシュをそのまま使ってほしい感ある
- プライベート用なのでherokuのように毎回新鮮なビルドを行うのではなく、逆にキャッシュを使わないようにするオプションを用意しておけばいいと思っている
- 言語・フレームワークごとに動作するdockerイメージを用意しておけばいいはず
- もしくはDockerfileを用意しておけばそれを使うorなんとかしてカスタマイズできるようにしておくなど
- アプリケーションのソース(git-repository)とdockerイメージ(docker-repository)の棲み分けというか、管理方法いいのありませんかね
- railsアプリのこの階層のここにDockerfileを置く、とかみたいな標準が無いのつらい
- やっぱりbuildpackのdockerイメージ版みたいなのが無いとDockerfile内でFROMでインポート出来ないのでつらそう
- そもそもImmutableな分Dockerfileにマクロとか変数を組み込めない(後から状態を変更できない)のがキツイ
- 例えば、Ruby2.1.1がインストールされているdockerイメージをbuildするDockerfileがあったとして、2.1.1の部分を外部に切り出して抽象化したくてもdockerの性質上難しい
- なのでDockerfileを生成するメタなものを作らざるを得ない
- travis.ymlとかProcfileみたいにDockerfileはここに配置するという標準を考える必要がありそう
- Dockerfile1つで済むようなアプリケーションだとアプリケーションルートでいいけど、2つ以上使うものはやっぱりディレクトリほしい
- デプロイサーバ側が知らないといけないのはビルド設定とアプリケーションのソースだけ
- 細かいビルド設定は大体よしなにできる(CPU数やメモリ容量やフレームワーク検知など)
- 問題はアプリケーションソース側でDockerfileをカスタマイズする筋の良い方策があまり思いつかないこと
- だから、Dockerfileは基本的には不要で、何らかのyml設定でカスタマイズDockerfileの場所を設定できるようにしたらいいと思う
- 全体最適と個別最適の共存が非常に難しい
- Jenkinsのビルド設定がアプリケーションごとに違うが、それをソース側に記述する汎用的な仕掛けを考える必要がある?
- RailsだとCapistranoでいいんだけど、、