くりにっき

フルスタックキュアエンジニアです

VagrantとVirtualBoxは別物

Twitterを見てるとたまにVagrantVirtualBoxを混同してる発言があってその度にイラッとしてるのでメモ。

tl;dr;

  • DockerとVagrantはカバーしてる分野が異なるツールなので比較するのは間違い
  • DockerとVagrantを比較してる場合、9割くらいの確率でVagrantVirtualBoxを混同している可能性が高い

雑な説明

VirtualBoxとは

www.virtualbox.org

WikiPedia より引用

Oracle VM VirtualBox (オラクル ブイエム バーチャルボックス)とは、x86ならびにAMD64/Intel64にかかる仮想化ソフトウェアパッケージの一つ。

要はVMの実行環境です。

似たような領域をカバーするツールとしての比較対象は下記

Vagrantとは

www.vagrantup.com

WikiPedia) より引用

仮想機械の提供自体は、VirtualBoxをはじめとする仮想化ソフトウェアが行う。Vagrantは、これらソフトウェアが用意されているのを前提として、仮想機械の設定や立ち上げに特化している。

要は色々な種類のVMの操作を同一の設定ファイルとインターフェースで操作するためのソフトウェア。

当たり前ですがEC2とGCEとではAPIが全く違うので、それらをVagrantを介して同じコマンドでVMの起動や停止ができるのは便利です。

Vagrantが提供してるのは各VMの操作をするためのインターフェースの部分だけなので VirtualBoxやEC2などのVMの実行環境そのものは提供していません。

Vagrant単体で使うことはなく、

のように各VM環境に対応したproviderと組み合わせて使うことが多いです。

ここで注意してほしいのはVagrantにはDockerのproviderもある(Vagrant + Dockerの組み合わせがある)ことです。 *2

www.vagrantup.com

つまりDockerとVagrantは対立するものではないし、ツールとしての性質が違うので比較するのが間違いです。

Vagrantと似たような領域をカバーするツールを敢えて言うと(Dockerではなく)Docker ComposeやDocker Machineだと思います。(異論は認める)

Vagrant + VirtualBoxがよくある組み合わせだと思うのだけど、そのせいでVagrantVirtualBoxが混同されている気がします。

よくある間違い

  • Vagrantはオワコン、時代はDocker!
    • Vagrantが下火なのは否定しないが比較対象が違う
    • VirtualBoxとDockerを比較してるなら話が通じる
  • 開発環境をVagrantからDockerに移行した
    • 「開発環境をVagrant( + VirtualBox)からDocker( + Docker Compose)に移行した」ということを言いたいんだろうけど、なんかもにょる

*1:VMとコンテナも別物なんだけどアプリケーションの実行環境という点では共通してるので比較対象に含めています

*2:ドキュメント読む限りあまり推奨されてない感はあるが