Docker と Vagrant の明確な違い

この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります

そもそも比較するようなものではないものの、分かりづらい解説しかなかったので、 超個人的な主観でまとめておこうと思いました。

Docker の特徴

  • Linux 上でのみ動く (Windows, Mac 上では動かない)
  • Linux のリソースを流用しつつも小さく閉じた環境を作ることができる
  • 小さいので作っては捨て、が容易

例えるなら・・・

  • 病院の中に超小型隔離施設を作るようなもの
  • 隔離されてるものの、診察も受けられるし隔離施設ごとトイレにも行ける
  • Docker コンテナをたくさん作る ≒ 病院内に超小型隔離患者がたくさん、みたいなイメージ

Vagrant の特徴

  • Windows / Mac / Linux それぞれにパッケージが用意されている
  • 実際は VirtualBox や VMWare のような仮想環境を提供してくれるものとセットで使う
  • 仮想環境としての Linux は、普通にインストールした Linux とほぼ変わらない構成

例えるなら・・・

  • 病院の敷地の中に病院を建てるようなもの
  • 内側の病院も、普通に診察できるし手術もできるし遜色なく利用できちゃう
  • Vagrant で VM たくさん作る ≒ 外側の病院敷地内に中小病院をたくさん建てる、みたいなイメージ
  • 複数建てるときは資金力がいる

Mac で Docker いじるってことは、超軽量な Linux を boot2docker とかでインストールして、その上で動いているケースが多く(あるいは他 VM を立ち上げてるとか)、結局 Docker は Linux 上でのみ動くってことになります。(今後 Windows 方面がサポートするかもしれないけど)

たぶん本番環境の検証という意味では、Vagrant + Chef で本番環境にできるだけ近しい状態を構築して検証とかすべきなんですけど、開発環境をいくつも立ち上げては消しみたいなことをやりたいんだったら、Docker の方が軽くて良いのでは?と思っているところです。

もし本番環境に Docker を入れて色々利用したいのなら、まずは Vagrant + Chef の環境を手元に作って、Chef のレシピで Docker の環境を整えるレシピを書けばいいんだろうか。(まだその辺りはすっきりしてませんのでこれからですかね・・・)

この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります

もし記事内に誤りなどございましたら、 @girigiribauer までご一報いただけると助かります。