前回Packer + itamaeでDockerfileのないDockerライフの記事でitamaeを使ってDocker imageを作ることにしました。
ただその時の課題として対象マシンにitamaeを動かすためにrubyをインストールしないといけないことでした
この問題を最近 k0kubunさんがリリースされたMItamaeが解決してくれそうだったので使ってみました。
MItamaeとは?
@k0kubun さんが作成されたmrubyのItamae
http://k0kubun.hatenablog.com/entry/mitamae
そもそもItamaeは何が問題だったのか
- Itamae ssh経由での適用は遅いのでサーバー側において実行したい
- linuxとかにはrubyが入っていないものもある
- Itamaeのためだけにruby一式をインストールする?
シングルバイナリで出来たら便利そうだ
MItamae登場
Itamaeの問題からItamae-goが出来たけどやっぱりrubyで書きたいよねってところから
mrubyのMItamaeが登場したそう。
何が嬉しいのか?
- 実行にrubyとかgemとかに依存しないので楽
- コンパイル済みのものを使用するので起動が高速
実際に試してみた
Packer + itamaeでDockerfileのないDockerライフ
でやったお題と同じrails serverを動かすものです。
リポジトリは前回と同じここに作りました。
Itamaeの時との差分に関して
レシピはほぼそのままで動く
ファイル変更にまだ対応していないので、新規作成にしてあげただけ
大きな変更点としては外部レシピの管理方法がかわったこと
Itamaeの時はGemfileに記載していたけど今回はmrubyを使っているので使えない。
そこで現状はgit submoduleで管理してる
MItamaeのバイナリのディレクトリにpluginsディレクトリをほってそこに追加していく。
詳しくは ここに書いてある。
.
├── cookbooks
│ ├── rails
│ │ ├── default.rb
│ │ ├── files
│ │ ├── hoge.rb
│ │ └── templates
│ └── rbenv
│ ├── default.rb
│ ├── files
│ └── templates
├── mitamae-x86_64-linux // 実行ファイル
├── plugins
│ └── itamae-plugin-recipe-rbenv
│ ├── CHANGELOG.md
│ ├── Gemfile
│ ├── LICENSE.txt
│ ├── README.md
│ ├── Rakefile
│ ├── itamae-plugin-recipe-rbenv.gemspec
│ ├── lib
│ └── mrblib -> lib
└── roles
└── ubuntu
├── default.rb
├── files
└── templates
MItamaeを使ってみて
今回はrubyをいれる題材だったので微妙だったけどelasticearchいれようとかrubyを必要としない環境を構築する時にItamae動かすからrubyいれないといけないとかitamae ssh遅くて辛いみたいな環境構築をする上の葛藤を少し軽減できる気がするので良さそう。
バイナリを対象マシンにアップロードすればすぐ動くのは 快適!!
現状のItamaeのレシピが無駄になるかというと、そうではなくてファイル編集などまだ対応していないものはあるものの今のレシピをほぼそのまま使用していけるので移行の障壁も低かった。