比較:git
固然,提問者確定更但願從應用層面來了解二者的區別。簡單點講,Vagrant就是你的開發環境的部署工具;而docker是你的運行環境部署工具。
不少程序員必定會問,爲什麼還須要一個開發環境部署工具呢,咱們平時隨隨便便就把一個WAMP服務器下載安裝配置好了,簡單方便,開包即用。
問題是,現實的開發環境會比這複雜太多太多。數據庫、緩存服務器、反向代理服務器、Load Balancer、搜索引擎服務器(例如Sunspot或Elastic Search)、網站服務器、實時推送服務器。數據庫每每還不止一種,爲匹配各類架構通常創業公司都會起Mysql或Postgres,與此同時,根據你的業務需求可能還須要添入Nosql或管理時間序列等各種數據庫。這麼多種不一樣的服務器,須要被配置而且完美地在一塊兒配合工做,相信任何老司機都知道,不是易事。即便你對每一塊都很熟悉,每一次從頭配置起,你總會在某些地方栽跟頭,即便依照事先作好的部署腳原本作,你還要保障每一個軟件工具的版本一致,而後腳本運行準確無誤。即便真的有老司機熟練到每一次服務器遷移或者服務器擴容,都能準確無誤地部署,那仍是躲不過一個事實:老司機有一天也會離職,這項精確的部署技能如何得以香火延續?你教得再好,那也只表明你教的,線上運維問題就像打鼴鼠遊戲,此處撲滅,彼處着火。
上述實際部署中會遇到的問題,不知道難倒過多少運維老司機,甚至一個小問題、小遷移,就能讓他們痛不欲生、徹夜奮戰。放假前五分鐘能搞定的事,放假後愣是得用五個小時對付。
轉而去思考一番,一個很是順其天然的方法就是把當前的開發環境作個鏡像,而後拷到U盤裏,這樣每個新員工加入直接對着U盤安裝就行(我有朋友的公司就這麼幹的!)。但這仍是解決不了太多太多開發環境的設置問題,若是開發環境更迭了呢?再作一個u盤麼?其餘人再安裝一遍麼?程序員
這個時候,vagrant的就出現了,而vagrant的出現顯然就是爲了解決如下兩個重點問題:(1)開發環境快速部署 (2)開發環境更迭。少一個點沒解決好,vagrant的存在都是僞需求。github
說白了vagrant就是一個普普統統的裝了一個Linux的VirtualBox虛擬機,配以vagrant 團隊爲之開發的一系列套件,輔助完成諸如安裝初始化、文件同步、ssh、部署環境升級、功能插件安裝等等一些列問題的開發環境部署套件。也沒什麼好神祕的。sql
但關鍵問題是,由於國內沒有很是好的vagrant資源提供商,vagrant在國內無法正常使用。至少,我在國內一共嘗試了三次,三次的結果我都是以爲vagrant無法給我周邊的程序員增長生產力。緣由我已經說了,若是你硬要嘗試着玩玩,我建議你先準備好一個國內最好最穩定最快速的網絡加速器(俗稱FQ),而後在vagrant up、vagrant provision以及其餘vagrant須要安裝境外資源前把proxy代理先設置好。不然....那得慢出翔來!!! 這是我以爲最不能忍的地方!!!爲了裝個比體驗下硅谷最早進的開發環境部署工具,我tm死死地盯着屏幕vagrant up長達一個小時,還隨時有可能斷線致使整個過程重來。你知道,我如今想來都是一肚子火!!docker
DOCKER,我給了它一個大寫。它的狀況就徹底徹底不同了!!數據庫
首先,簡單地說,Docker就是在內核容器技術(Cgroup和Namespace)的基礎上,提供了一個更高層的控制工具,該工具包含一下特性:(1)跨主機部署(2)以應用爲中心 (3)自動構建 (4)版本管理 (5)組建重用 (6)共享 (7)工具生態鏈。 《Docker 進階與實戰》Page.8 By 華爲Docker實踐小組。緩存
By the way, 國內Docker哪家強? 別胡扯了,技術上,第一絕壁是華爲!去Docker的github主頁上翻翻它的前200的contributors,看看有多少華爲的。技術上是華爲,但從生態上,我以爲最強的是阿里,阿里一家就把代碼託管、docker持續集成部署以及虛擬主機三塊業務所有作了,並且三者都很是好用。僅docker持續集成部署這一項,我以爲就已經完爆我用過的全部的docker服務了,這裏我就不一一列舉,不少都是業內朋友,不免誤傷。並且阿里頗有錢,他們能夠任性免費到底。因此docker選哪家?我呢,也是docker使用老司機了,從硅谷工做、個人第一個創業項目、第二個創業項目,統統都是docker部署的,我如今使用的是阿里容器服務: https://cs.console.aliyun.com ,配合阿里的虛擬主機以及代碼託管(code.aliyun.com),實在不能再方便。服務器
創業圈的docker服務,我比較推薦http://daocloud.io,好久之前我還去他們家上海總部作過使用開發demo,這是一家頗有工程師文化的企業,並且裏面確實有好幾個國內docker界頂級玩家。網絡
話說到此,docker之因此在國內能流行起來,是由於docker在國內有強大的羣衆基礎;而這個羣衆基礎的創建是多方面緣由的,例如:docker的管理高層也屢次來華參加活動,助力docker;無數個docker服務商在作着各類各樣的docker底層設施工做。但是歸根結底,docker之因此會受到如此追捧,是由於docker是一門真正意義上的具備革命性和劃時代意義的普惠技術,而vagrant不是。docker能夠幫助你實現秒級部署、分鐘級服務器棧遷移。這是歷史上還歷來沒有發生過的事。多線程
那針對國內能夠流暢使用docker但沒法正常使用vagrant的狀況,做如何處理呢?
咱們團隊的解決方案是將服務器部署的docker編排腳本(docker-compose)直接修改參數以適應Local開發。每次開發前,docker-compose up -d,再配以各種腳本。結果是,這樣開發起來比在硅谷用Vagrant還要爽!!Vagrant全部的操做均可以用在docker中同樣作,例如:
因此,到最後,咱們發現,開發部署都用docker還有一個額外好處,vagrant的開發環境到部署環境仍是存在差別的,而咱們開發用的起docker集羣的編排腳本無需通過調試直接複製到服務器端就能一行命令解決部署:
docker-compose up -d
Vagrant is a tool focused on providing a consistent development environmentworkflow across multiple operation systems. Docker is a container managementthat can consistently run software as long as a containerization system exists.
Containers are generally more lightweight than virtual machines, so startingand stopping containers is extremely fast. Most common development machinesdon't have a containerization system built-in, and Docker uses a virtual machinewith Linux installed to provide that.
Currently, Docker lacks support for certain operating systems (such asBSD). If your target deployment is one of these operating systems,Docker will not provide the same production parity as a tool like Vagrant.Vagrant will allow you to run a Windows development environment on Mac or Linux,as well.
For microservice heavy environments, Docker can be attractive because youcan easily start a single Docker VM and start many containers above thatvery quickly. This is a good use case for Docker. Vagrant can do this as wellwith the Docker provider. A primary benefit for Vagrant is a consistent workflowbut there are many cases where a pure-Docker workflow does make sense.
Both Vagrant and Docker have a vast library of community-contributed "images"or "boxes" to choose from.