本質區別
Vagrant並不提供虛擬化技術,本質上是一個虛擬機外掛,通過虛擬機的管理接口來管理虛擬機,讓用戶更輕鬆的進行一些常用配置,比如:CPU/Memory/IP/DISK等分配。並且提供了一些其它的管理操作:比如開機運行指定命令,鏡像二次打包,插件編寫等等。
Vagrant官方有介紹
To achieve its magic, Vagrant stands on the shoulders of giants. Machines are provisioned on top of VirtualBox, VMware, AWS, or any other provider. Then, industry-standard provisioning tools such as shell scripts, Chef, or Puppet, can be used to automatically install and configure software on the machine.
而docker是一個容器引擎,每一個實例是一個相對隔離的空間,與宿主機共享操作系統內核,並且共享宿主機資源。相對於披着虛擬機皮的vagrant,docker更加輕量,消耗更少的資源。
貼一張docker官方介紹圖
關於虛擬機和docker的區別這邊文章有更形象的解釋:一篇不一樣的docker原理解析 - uncle creepy的文章 - 知乎專欄
應用場景
關於應用場景沒有絕對,把兩個東西都用熟,自己覺得用哪個方便用哪個好管理就用哪個。
vagrant
既然vagrant本質是虛擬機外掛,那麼它的應用場景就是,節省你用原生虛擬機管理軟件的時間。
原來我們新增一臺虛擬機需要配置好內存、硬盤、CPU等,然後添加iso,安裝。創建用戶,等等。一套下來好幾十分鐘是吧?聰明點你可能會想到複製一個創建好的鏡像然後粘貼。
但這一切vagrant都幫你想好了
安裝vagrant後你只需要6步就能創建一臺新的虛擬機,其中兩步是創建文件夾和切換文件夾
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant box add hashicorp/precise32
$ vi Vagrantfile
#添加配置
$ vagrant init
從安裝到創建一臺新的虛擬機就成功了。如果你想要再添加一臺虛擬機,你只需要執行最後兩步,添加一個不同名字的配置就能再新建一臺虛擬機。還支持鏡像、開機自動運行腳本、插件編寫等。
docker
docker主要應用於解決環境依賴以及爲應用程序提供一個相對隔離的空間,一個實例像操作系統裏運行的一個程序。
原來部署一套環境是不是得自己編寫自動化部署依賴環境以及程序的腳本?如果有兩個依賴同一程序或庫的不同版本怎麼辦?絕對路徑?軟連接?
docker能很好的解決你的煩惱。把需要的依賴環境打包成一個鏡像,再把程序放鏡像裏面運行。
總的來說
- vagrant更適合給開發大爺們創造一個統一的開發、測試、接近於完全隔離的環境,以及提高對高配機的閒置利用。
- docker更方便地解決了同一機器上的環境隔離,以及提高運維鍋們解決部署時環境依賴的效率。