Packer雑感
Packerを使ってChef/Puppet/AnsibleでDockerのイメージをつくる
で初めてPackerを使った.そのときの思ったことをざっと書き留めておく.
Packerは,Vagrantの作者であるMitchell Hashimoto氏によって開発が進められているVirtualBoxやVMWare,Amazon EC2などの仮想マシンのイメージの作成を行うツール.VagrantのVirtualBox用のBoxを作るveeweeに置き換わるツールとして知られている.
リリース時からPackerはVagrantのBoxを作る専用ツールとしてのイメージが強かった.実際,box作るときはベースboxを基にvagrantのプロビジョニング機能を使ってvagrant package
で済むし,ヘビーにVagrantを使うユーザのためのツールだと思っていた.また,ネット上にあるPacker関連の記事はこの用途を対象にしたものが多い.
だから,今回も基礎としてVagrantのboxの作成からやり始めた.が,正直途中で心が折れた.というのも,VirtualboxのVagrantのboxを作るときはisoイメージをベースに始めるため,KickStartとかPreseedの知識を要求される.その辺りはなじみがなくて辛かった.Redhat系のKickstartはまだ読めたが,Debian系のPreseedはしんどかった.Packerとは関係のないところで,理解が追いつかなかったために,Packerそのものの理解にたどり着くのが大変だった.
ただ,Dockerのイメージ作成やAmazon EC2のAMIの作成をやり始めると,VirtualBoxのbox作成と比べてシンプルであり,なじみもあるため理解が進んだ.そして,Packerはものすごくシンプルかつ強力なツールだということがわかった.Packerを自分なりの言葉でまとめてみると,
- builderで仮想マシンのテンプレート(ベース)の設定をする.
- ShellscriptやChef,Puppet,Ansibleで共通のプロビジョニングをする.
- post-processorで決められた形式(boxかdocker imageか)で仮想マシンを書き出す.
の一連の流れを自動化するツール.このとき1)と3)は基本的にはテンプレで,大体やることは決まっていると思う.自由度があるのは2)で,どのプロビジョニングツールを使って,どのようなセットアップをするかをユーザが自由に決めることができる.ちょっとしか触ってないが,2)ができることがPackerの強力な部分ではないかを思っている.
まとめると,Packerの入門をするときは,Vagrantの用のboxを作るツールという概念を捨てて,DockerイメージやAMIから始めると良いと思う.そうすれば,Packer特有の概念である,builderやpost-processorsが理解しやすい.
最後に参考文献.Packerの日本語の記事だとryuzeeさんが既に駆け抜けている.“実践Vagrant”にもPackerの付録があり,理解の助けになった.