Let Me Be Me

大道無門千差有路。透得此關乾坤獨歩。

Packer, Docker, Veewee, Vagrant, Chef...

今更ながら、この辺の仮想環境を構築したり、コンフィギュレーションを行うツールが多すぎてよくわからなくなってきたので、なげやりな感じでまとめてみる。

Vagrant

f:id:junsumida:20140414001758j:plain

言わずと知れたVagrant。2010年、Mitchell Hashimoto氏によってスタートした。*1 最初の頃は、VirtualBoxCLIインターフェースという感じだったが、最近はVmware, AWSもサポートしてる。*2 Disposableな開発環境を提供してくれる。

Packer

f:id:junsumida:20140414000214j:plain

Vagrantの作者のMitchell Hashimoto氏が作成した、単一のconfigurationファイルで複数のプラットフォーム向けに同一のイメージを作成することを目的としたツール。*3 Vagrant向けの機能は実装されているが、Vagrantとは完全に独立している。*4 Vagrant上に構築した開発環境とAWS環境上に用意したStaging, Production環境を限りなく同一に近づける、みたいなことができる。

Veewee

jedi4ever氏による、VM用イメージ作成ツール。Vagrantだけでなく、VMWare, KVMなどに対応している。各Linuxディストリビューションが配布しているイメージを使用して、ゼロからVMイメージを作成/設定することができる。publicで配布されているVagrant boxをそのまま使うのが信用できない場合に使う。*5 (個人で作成して公開しているboxなんかは怖くてよく使えるなあと思ってしまう。)


Docker

f:id:junsumida:20140414003412j:plain

LXCの低レイヤなkernelの機能の土台の上に、Dockerは、いくつものパワフルな高レイヤのツールを提供している。 On top of this low-level foundation of kernel features, Docker offers a high-level tool with several powerful functionalities: What does Docker add to just plain LXC? - Stack Overflow

f:id:junsumida:20140414004615j:plain

コンテナと呼ばれるsandbox環境をHost OS上に作って、その中でアプリケーションを動かすことができる。*6 0.9.0でlibcontainerがデフォルトのdriverになり、LXC依存ではなくなった。*5

Vagrantで構築したVM上でDocker使うこともできる。Dockerの設定は、通常Dockerfileという設定ファイルで行う*7が、Packerを使うと、Dockerfileを使わずにprovisioningを行うことができる。つまり、Chefのようなツールを使ってDockerの環境を構築することができる。*8

Puppet vs. Chef vs. Ansible vs. Salt

configuration & orchestration tools まともに使ったことがあるのが、Chefだけなので、違いが全然わかってないのだけど、PuppetとChefは開発者向け。AnsibleとSaltはシステム管理者向けらしい。Review: Puppet vs. Chef vs. Ansible vs. Salt | Data Center - InfoWorld

この辺、気が向いたらちゃんと書く。