DockerとVagrantの違いについて、調べてみました。
概要
最近良く聞く言葉に「Docker」と「Vagrant」があります。
これらについて調べてみると、DockerとVagrantは、仮想環境の開発・実行環境であることは分かったのですが、違いや使い分けが分からなかったので、これらの違いや使い分けを考察を交えながら書いていきます。
Dockerとは
そもそも、Dockerとはどのようなものなのか、まとめておきます。
- 仮想環境で、簡単に作成・破棄ができる開発・実行環境を構築できる
- 仮想環境は、コンテナ型と呼ばれるもので、ディスク・メモリの消費が少なく、軽量である
- コンテナ型の仮想環境の構築に、Linuxカーネルの技術を使っているため、Linuxカーネルを使ったOSしか使うことができない
- 環境の構築は、元となる環境に差分を追加していく形となる(レイヤー構造と呼ばれている)
Vagrant
次に、Vagrantとはどのようなものなのか、まとめておきます。
- Dockerと同じく、仮想環境で、簡単に作成・破棄ができる開発・実行環境を構築できる
- 仮想環境は、ハイパーバイザー型と呼ばれるもので、コンテナ型と比べると、ディスク・メモリの消費が多い
- しかし、Linux以外のOSの環境が構築できるなど、コンテナ型と比べて自由度が高い
それぞれの違い
基本的に、どちらもできることに大きな違いがありません。
ただ、そのできることの実現の方法に違いがあります。
上記にあるように、Dockerは仮想環境にコンテナ型、Vagrantはハイパーバイザー型を採用しています。
よって、DockerとVagrantの違いはここに、関係してきます。
コンテナ型とハイパーバイザー型の違いの詳しい説明は、検索するとたくさん出てくるので割愛します。
これらのことをまとめると、Linux系のOSしか使えないなどの制約があり、動作が軽いのはコンテナ型であるDocker、コンテナ型と比べると自由度が高いが、動作が重いハイパーバイザー型であるVagrantのようになります。
使い分け
違いがわかったところで、どのように使い分けたほうがいいのか、考察を含めて書いていきます。
開発環境
できることに大きな違いがないので、どちらを使ってもいいのですが、WindowsなどのOSを使いたい場合は、Vagrant一択です。もし、Linux系のOSで、動作が軽くディスクやメモリの消費をおさえたい場合は、Dockerを使うといいと思います。
個人的なDockerとVagrantの使用感ですが、VagrantはVirtualBoxやVMWare Playerなどの仮想環境の考えをもとに環境の作成や破棄を簡単にしたもののように感じます。なので、いままでVirtualBoxやVMWare Playerなどで、環境を構築したことがある人は、Vagrantの使い方を覚えやすいと思います。
Dockerは、Vagrantに比べて動作が軽いのですが、使い方がVagrantとだいぶ違うので、VirutalBoxやVMWare Playerなどを使ったことがある人は、慣れるまでに時間がかかるかもしれません。
本番環境
こちらも、できることに大きな違いがないので、どちらを使ってもいいのですが、調べてみると、本番環境ではDockerのほうがよく使われている印象があります。
(「Vagrant 本番環境」で検索したら1ページ目にDockerの話があったときは驚いた)
基本的には、開発環境にVagrantを使っているなら本番環境もVagrant、Dockerを使っているならDockerのほうがいいと思います。
そもそも、VagrantとDockerは、動作環境を変えても正しく動くことを目的としている部分があるので、このようにするべきであるといえます。
まとめ
どちらも、同じことをできるので、好みによって使い分けるのがいいと思います。
個人的にはDockerの方が、動作が軽いので、Linux系のOSであれば、積極的にDockerを使っていきたいと思います。