題 我為什麼要使用Vagrant而不僅僅是VirtualBox?


多年來我一直在使用VirtualBox來創建開發環境。

我的很多同事都在談論Vagrant,很多人似乎對此感到非常興奮,但我似乎無法理解它的好處。在我看來,這似乎是為了做同樣的事情而學習的一系列新命令我用Virtualbox做的事情。

使用VirtualBox,我可以完美地安裝和配置環境,然後我可以將其打包為OVA或其他任何內容,並與其他辦公用戶共享。如果出現問題,您可以在VirtualBox中拍攝快照。

木偶和廚師真的不是Vagrant的一部分,他們是他們自己的事情嗎?

那麼,Vagrant在VirtualBox上提供什麼樣的優勢呢?


214
2018-04-17 14:39


起源


兩年後,我現在每天都在使用Vagrant進行開發 - 這太棒了!我的團隊使用它,它解決了我們的開發環境問題。 - John Hunt
自以為是:如果您從未在設置PXE服務器時遇到任何問題,請務必了解VBoxManage,了解如何在不到一分鐘的時間內設置nfs等,以及直接管理構建鏈......這一點幾乎沒有任何意義。你失踪的每個部分的價值都會上升。廣泛使用並非來自傀儡整合,而是因為人們可以在互聯網上發現安全漏洞。不管他們告訴你什麼。 - Florian Heigl
我也發現vagrant在一個多開發團隊中更有用,而以前它只是我。我對我的團隊強加了流浪漢,發現價值就在哪裡。 - John Hunt
3。5年後,我現在每天都使用碼頭工具進行開發。它是好的,但與流浪者不同的野獸......根據你的要求,我認為流浪者仍然是一個更好的團隊開發平台 - 它更容易使用。 - John Hunt
4年過去了,我發現碼頭很糟糕。流浪漢萬歲。 - John Hunt


答案:


這是一個很大的問題,所以我將把它分成兩部分。

流浪漢

Vagrant用於通過以下方式設置一個或多個虛擬機:

  • 導入預製圖像(稱為“盒子”)
  • 設置VM特定的設置(IP地址,主機名,端口轉發,內存等)
  • 運行Puppet或Chef等配置軟件

請注意,它不會安裝軟件或設置機器加載VM並設置VirtualBox設置。可以將其視為VirtualBox的腳本引擎。

以下是我看到使用Vagrant而不僅僅是VirtualBox的一些原因。

1.輕鬆設置多VM網絡

我讀過的大多數Vagrant高級用戶內容都是關於同時設置多個虛擬機的。 Vagrant為您提供了一個配置文件來設置它們,使您可以使用一個命令啟動所有這些文件。

假設您已配置三個VM使用192.168.1。*子網上的靜態IP相互聯網。您發現自己處於已經使用該子網分發IP地址的位置,並且您的VM現在發生衝突。使用Vagrant,您可以簡單地編輯Vagrantfile並重新加載VM,而使用VirtualBox,您必須打開每個VM的設置,如果沒有啟動每個VM並在其中更改它們。

2.源控制

通過將設置放在文本文件中,可以將配置置於源代碼管理之下。上週做了一些改變,不小心打破了形象?只需還原更改並重新加載VM。您可以使用VirtualBox快照完成此操作,但它將佔用比Vagrantfile更多的空間。

3.各種平台

在諸如此類的網站上有大量的盒子可用 http://vagrantbox.es。這使您可以嘗試各種操作系統或分發,應用相同的配置來設置類似的環境。這可以幫助測試或添加對新平台的支持,並且僅使用VirtualBox將非常耗時。

使用配置軟件以及使用圖像快照有很多爭論。如需進一步討論,我將向您介紹Stephen Nelson-Smith的精彩文章 如何在一天內構建100個Web服務器


146
2018-04-27 05:41



不過,我不明白為什麼我應該在開發環境中使用vagrant!因為,它很昂貴(如果你想使用VMWare!)我們可以準備一個虛擬機,如流浪者使用的基本盒,然後通過VMware克隆設置另一個虛擬機。首先,我們可以通過控制所有虛擬機設置 vmrunVMware提供的命令甚至IP地址更改或在客戶機內運行腳本! - Oğuz Çelikdemir
@OğuzÇelikdemir這是一個公平的觀點。 Vagrant只是為VMWare提供了一個更簡單的前端,以便開發新機器。在幕後,它正在使用 vmrun 控制它。我一直使用VirtualBox,因此沒有VMWare後端的任何經驗。 - Adam Lukens
@AdamLukens,感謝您的詳細評論。你提到的聽起來很有趣..但我想知道你是否意識到這一點 VboxManage 命令? virtualbox.org/manual/ch08.html  您提到的幾乎所有內容都可以通過將特定的ip /參數傳遞給腳本來創建 vboxmanage controlvm 或者shell腳本中的類似命令然後版本控制那麼..那怎麼辦 vagrant 改善 virtualbox? - alpha_989
@ alpha_989我同意。使用Vagrant似乎沒有獨特之處。只是為了方便。 - Niklas Rosencrantz


除了Adam給出的優秀答案外,Vagrant還將所有內容聯繫在一起。雖然Chef和Puppet(以及Salt和shell腳本以及您想要使用的任何其他配置程序)是不同的東西,但Vagrant將它們聯繫在一起並使其僅與 vagrant up

那一個命令會

  1. 如果需要的話,只需啟動VM,但它也會
  2. 如果尚未完成,請從指定的基本框創建框,但如果您的機器上甚至沒有基本框,則首先
  3. 從其URL中獲取並將其下載到您的計算機。

你不必考慮所有這些。假設你正在轉向另一個項目,一個由同事開始。您只需從您的倉庫中籤出代碼,然後運行即可 vagrant up,不要擔心下載ISO或安裝任何東西,或者想知道您需要為該特定客戶端使用哪個版本的發行版,或者您是否擁有已經擁有所需內容的VM的副本。

您甚至不需要擔心他們是使用Chef或Puppet進行設置還是僅使用shell腳本。 (好的,所以你可能需要做一個 bundle install 或者確保你已經安裝了所有東西,但仍然沒什麼大不了的。)

通過將所有內容捆綁在一起,並為所有內容提供統一的界面,它可以使除了最簡單的用例之外的所有用例變得更加容易。起初你可能覺得你只是重新學習一種新的方式去做你已經在做的事情,但是一旦你深入了解Vagrant,你會發現你可以用更少的努力做更多事情。這對初始時間投資來說非常值得。


26
2018-01-09 17:56



但是,對於我來說,向開發人員發送預設的虛擬機映像比安裝流浪者,學習如何使用它以及處理任何出現的無數問題(尤其是在支持時)更加容易和快捷。窗戶盒子。我也真的不明白。似乎只是粉絲們。 - hopeseekr
如今安裝Vagrant簡直令人難以置信。任何無法安裝它的人都不可能信任編寫代碼。在開源程序檢出的源代碼中使用Vagrantfile實際上比發送VM容易得多。 Vagrantfile定義了設置,包括從中下載基本VM(然後配置它)的URL。如果您最初不需要進行配置更改,那麼您已完成所有設置。但是當您處理項目時,您可能需要進行更改。在您的Vagrantfile中執行此操作。 - iconoclast
由於您使用代碼保留Vagrantfile,因此您加入項目的所有開發人員都將自動獲取您對VM所做的更改,因為您在Vagrantfile中進行了更改。配置Vagrantfile並不困難。如果您發現Chef和Puppet過度(通常是他們),您可以使用shell配置。如果您可以在VM中輸入shell命令,那麼在Vagrantfile中設置shell配置命令是一個很小的障礙。從長遠來看,這將需要一個小的前期努力,並為您節省許多麻煩。 - iconoclast
@hopeseekr我也在想這個。我一直在努力尋找好處。我想我終於明白了。我一直在讀一本關於Python網絡的書。測試是一種複雜的設置,模仿您可以用來學習的機器。你可以用Linux建立一個VM,手工完成,我是一個人,所以沒關係。我在Windows上安裝了Vagrant並輸入了三個Vagrant命令來調用他的圖像以在VirtualBox上使用。如果我有50台電腦怎麼辦?很長時間設置快照。如果有變化怎麼辦? 50次更新?對我來說,我能夠立即開始工作,而無需設置所有內容。 - johnny
當你需要改變所有50台電腦的東西? - iconoclast


將廚師或木偶與VM配置集成的能力是關鍵。大多數流浪漢用戶會告訴你他們經常“流浪漢提供”和偶爾“流浪漢重新加載”比“流浪漢”或“流浪漢摧毀”更頻繁。這些任務表明真正的工作不是在啟動/關閉虛擬機,而是在事後“管理”它們。

提出一個更好的問題(由熟練的廚師用戶提出,無論如何)可能是為什麼使用Vagrant而不是刀具適當的插件(稍後將獲得虛擬機插件)?例如,將存儲在數據包中的參數值傳遞給刀插件(方式)比處理一個巨大的Vagrantfile更加智能,靈活和易於管理。我通常在廚師數據庫中定義我的“動態”資源,如CPU數量,內存量,要部署的操作系統,主機名,IP,路由等,這樣我就不需要不斷更改我的食譜了; - )。通過Chef Web界面編輯數據庫是一個非常簡單的數據輸入任務,我可以給大多數初級操作員。使用Vagrantfile,你永遠的modiyfing代碼,信不信由你 - 代碼中斷 - 這幾乎可以保證你不會將簡單的更改交給操作人員。

除了刀具還沒有虛擬機的插件(雖然我設想在不太遙遠的未來),已經有大多數“企業”虛擬化產品的插件,包括vmware,xenserver和幾乎所有主要的“雲”提供者。這意味著當你準備好超越虛擬盒時,刀具遠遠優於Vagrant提供的。目前,Chef社區似乎很高興讓虛擬機用戶與Vagrant一​​起跛行,因為他沒有將virtualbox apis集成到一個刀插件中。有一個刀流式插件允許使用數據包傳遞參數。但是,它仍然需要流浪軟件和它的單片Vagrantfile才能運行。

所以,我會走出去,說Vagrant絕對不比廚師用刀更好;但如果您堅持使用虛擬機,並且可能比使用數據包管理廚師更“容易”,只需要有一個相當簡單的管理環境。


8
2018-03-21 14:13





這是另外兩個開發人員用例,vagrant簡化了(通過“普通”VirtualBox)。我沒有看到這些用例在前面的答案中特別提到。

  1. Vagrant有助於保持開發和生產平台盡可能彼此接近。在理想情況下,您可以為生產環境配置用於配置Vagrant VM的SAME腳本,從而最大限度地減少部署時的意外情況。

  2. 集成測試和持續集成:Vagrant易於通過測試進行控制,因此在進行測試運行時,可以通過Jenkins等工具輕鬆控制整個多機器堆棧。

是的,“普通”VirtualBox也可以在這裡使用 - 但是vagrant使用的約定使得設置這些場景變得更加簡單。


8
2018-06-20 11:19



我認真地將vmx和vmdk從Windows複製到Linux。也許它在虛擬盒世界中有所不同,但我對此表示懷疑!什麼更容易?複製文件或弄亂vagrantfiles以及可能出錯的無數問題? - hopeseekr
為了更好地說明,Vag​​rant可以被認為是一種虛擬定義語言,可以描述虛擬機的特性 - 無論它是在VirtualBox,VMware,Parallels還是有什麼東西下託管。看看Vagrant如何不與VirtualBox“競爭”,而是與它一起工作,或者超越它。 - MarkHu
人們通常會使用Vagrantfile來描述如何為項目設置虛擬機 - Vagrantfile將提交給項目的源代碼控制(git等),以便在GitHub上進行共享等。下載量要小得多而不是整個VMDK。 - Ben XO


Vagrant抽象虛擬機,因此它允許您輕鬆切換虛擬機實現。您可以從Virtual Box切換到AWS或Digital Ocean。這就像使用SQL而不是特定於數據庫的查詢語言。

Vagrant允許開發人員只用一個命令快速設置他們的環境,它與其他人完全一樣。這對於開發人員經常出入的大型公司來說非常重要。它可以將設置時間從3天減少到1小時。

+亞當說的話。

(我仍然沒有找到Chef或Puppet的用途......)


0
2018-03-29 01:58