vagrant

什么是Vagrant
簡(jiǎn)單來(lái)說(shuō),Vagrant 就是一個(gè)虛擬機(jī)的集成管理器砸紊。

我們用它可以快速創(chuàng)建虛擬機(jī)传于,可以快速部署好所需的各種環(huán)境,無(wú)論你想要開發(fā)環(huán)境或是上線環(huán)境都能一鍵搞定醉顽。甚至你可以部署多臺(tái)都沒問題沼溜。

想想看,假設(shè)一臺(tái)Application Server游添,再加一臺(tái)Master Database + 一臺(tái)Slave Database系草,也許可以再來(lái)一臺(tái)Monitor Server等等,全部都可以用你那臺(tái)開發(fā)工作的電腦來(lái)實(shí)現(xiàn)唆涝,只要有足夠內(nèi)存找都。是不是很牛的樣子?所以說(shuō)廊酣,要讓我們不用Vagrant能耻,給個(gè)理由先?

安裝
我們所需要的實(shí)際是 Vagrant+Virtualbox 這兩樣?xùn)|西啰扛。

Vagrant可以在上面列出的官網(wǎng)去下載軟件包嚎京,目前最新版本是1.2.7。

Vagrant支持的是Virtualbox這個(gè)虛擬機(jī)軟件隐解。Virtualbox是開源的鞍帝,它以前是獨(dú)立發(fā)布,現(xiàn)在已經(jīng)被Oracle收購(gòu)了煞茫,直接去官網(wǎng)下載安裝即可帕涌。另外摄凡,Vagrant還支持VMvare虛擬機(jī),不過(guò)這個(gè)功能是收費(fèi)的蚓曼,一般就不用考慮了亲澡。

基本使用
添加Box源
我們要先確定使用什么系統(tǒng),是準(zhǔn)備用Ubuntu纫版,還是上Centos床绪,或者BSD系列。確定好后其弊,我們就可以到vagrantbox.es這個(gè)地方查找癞己。Vagrant把每個(gè)打包好的虛擬機(jī)系統(tǒng)叫做box。這里都是網(wǎng)絡(luò)上的熱心人已經(jīng)打包好的box梭伐,各種系統(tǒng)都有痹雅,必有一款能滿足你的需要。

例如我習(xí)慣使用CentOS糊识,就可以這樣來(lái)添加一個(gè)box到Vagrant里:

vagrant box add CentOS-64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
這樣Vagrant就會(huì)下載這個(gè)box绩社,下載完成后添加到自己的box列表里÷该纾可以用:

vagrant box list
來(lái)查看愉耙。如果網(wǎng)速不夠快,一個(gè)技巧就是可以先把這個(gè)box下載到本地哑梳,然后在上面命令中使用本地文件地址就好了劲阎。

每個(gè)box都相當(dāng)一個(gè)系統(tǒng)的安裝源,接下來(lái)我們就要用到了鸠真。

開始第一個(gè)虛擬機(jī)
我們新建一個(gè)工作目錄vm悯仙,然后在vm里使用這個(gè)命令:

vagrant init CentOS-64
然后我們會(huì)看到如下提示信息:

A Vagrantfil has been placed in this directory. You are now ready to vagrant up your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on vagrantup.com for more information on using Vagrant.

Vagrant在vm目錄生成了一個(gè)“Vagrantfile”的設(shè)定文件。全部的設(shè)定都在這個(gè)文件里吠卷,我們先不管锡垄,以后再研究。現(xiàn)在先讓虛擬機(jī)跑起來(lái)祭隔!

輸入命令:

vagrant up
稍微等待一段時(shí)間后货岭,我們就會(huì)看到Vagrant會(huì)輸出很多行信息:

<code>
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
</code>

Yes!虛擬機(jī)已經(jīng)正式在運(yùn)行了疾渴。

那么怎么連上去呢千贯?照常規(guī)那樣開一個(gè)ftp軟件,輸入ip搞坝、帳號(hào)搔谴、密碼去連接嗎?No桩撮!

vagrant ssh
這個(gè)命令直接就把你送進(jìn)虛擬機(jī)去了敦第。默認(rèn)帳戶是vagrant峰弹,密碼一樣。現(xiàn)在開始折騰這臺(tái)機(jī)器吧……

另外芜果,虛擬機(jī)已經(jīng)有一個(gè)/vagrant目錄鞠呈,和我所在的vm目錄是直接映射的。vm里的任何文件都能在/vagrant目錄里看到和使用右钾∫狭撸酷吧?

打包自己的Box
當(dāng)你把自己的虛擬機(jī)做好所需的環(huán)境舀射,例如我的CentOS-64會(huì)升級(jí)好yum軟件包灭将,安裝好MySQL、PHP等環(huán)境后后控,不想以后每次都把這個(gè)過(guò)程重來(lái)一次,或者假如在團(tuán)隊(duì)里不想每個(gè)成員的開發(fā)環(huán)境各自五花八門亂七八糟空镜,我就可以把這個(gè)做好的CentOS-64打包出來(lái)浩淘,分享給團(tuán)隊(duì)成員。

vagrant package
稍等一點(diǎn)時(shí)間后吴攒,Vagrant會(huì)在vm目錄下輸出一個(gè)package.box的文件张抄。沒錯(cuò),這完全跟我們?cè)谏厦鎣agrantbox.es下載的box文件一樣的洼怔,實(shí)際上那里熱心人分享的box文件都是這么來(lái)的署惯。所以可以用同樣的方法添加到box列表里去,例如:

vagrant box add CentOS-64S package.box
這樣以后我們就可以直接使用這個(gè)新box來(lái)生成虛擬機(jī):

vagrant init CentOS-64S
新虛擬機(jī)直接就是一個(gè)做好的PHP Server镣隶。

原來(lái)的CentOS-64這個(gè)box完全可以刪掉了极谊,還可以節(jié)省一點(diǎn)空間:

vagrant box remove CentOS-64
虛擬機(jī)的設(shè)定
上面說(shuō)到Vagrant會(huì)為每個(gè)虛擬機(jī)都生成一個(gè)Vagrantfile設(shè)定文件。

用任意文本編輯器打開它安岂,如果你對(duì)Ruby語(yǔ)言有一點(diǎn)了解的話轻猖,就會(huì)明白實(shí)際整個(gè)內(nèi)容都是Ruby Code。而且Vagrant很貼心的準(zhǔn)備了詳盡到有些啰嗦的注釋給你域那,這里強(qiáng)烈建議你仔細(xì)看看咙边。實(shí)際對(duì)于每個(gè)選項(xiàng)設(shè)定都說(shuō)的非常清楚了。

主要的設(shè)定大概有這么些:

注:下面提到的設(shè)定有些是默認(rèn)注釋掉的次员,沒有開啟败许,務(wù)必要取消注釋才會(huì)生效。

config.vm.box = "CentOS-64"
這指定了虛擬機(jī)使用哪個(gè)Box源淑蔚。

config.vm.network :forwarded_port, guest: 80, host: 8080

這個(gè)設(shè)定非常牛市殷,它會(huì)把Host機(jī)器(就是安裝Vagrant的機(jī)器)的8080端口轉(zhuǎn)發(fā)(forwoard)到虛擬機(jī)的80端口。例如你部署到虛擬機(jī)的網(wǎng)站運(yùn)行后束倍,當(dāng)你在Host機(jī)器上瀏覽器打開http://localhost:8080后被丧,就會(huì)自動(dòng)轉(zhuǎn)到虛擬機(jī)正在運(yùn)行的Apache或Nginx 80端口服務(wù)盟戏,也就是訪問部署的網(wǎng)站。實(shí)際上甥桂,這個(gè)功能是架起了Host機(jī)器和虛擬機(jī)之間溝通的橋梁柿究。 以此類推,我們可以增加更多的端口轉(zhuǎn)發(fā)黄选,如常用的MySQL 3306端口蝇摸,Rails 的3000端口等。

config.vm.network :private_network, ip: "192.168.33.10"

config.vm.network :public_network

這兩個(gè)是設(shè)定網(wǎng)絡(luò)連接方式办陷。前者把虛擬機(jī)網(wǎng)絡(luò)設(shè)定為私有模式,和你Host機(jī)器同一網(wǎng)絡(luò)的其他電腦是看不到它的民镜。后者相反啡专,設(shè)為公開模式鲸鹦,和你Host機(jī)器有類似的IP,同一網(wǎng)絡(luò)的其他電腦都能看到它葛菇。一般都采用前者甘磨,而且IP也建議不以“192.168”開頭,以免沖突眯停,例如可以設(shè)為“66.66.66.10”這樣……

vb.customize ["modifyvm", :id, "--memory", "1024"]
這個(gè)可以手工設(shè)定虛擬機(jī)使用多少內(nèi)存宽档,根據(jù)你自己情況來(lái)定就好。類似Linux這樣的Server庵朝,一般512就夠了吗冤。

其他的設(shè)定還有些,不是特別重要九府,讀者可以自行去了解看看了椎瘟。

多臺(tái)虛擬機(jī)組合
我們的產(chǎn)品正式部署上線的時(shí)侯,經(jīng)常都可能不是一臺(tái)而采用多臺(tái)服務(wù)器的情況侄旬。例如 Database 要和 Application 分開肺蔚,Database 有時(shí)還有 Master、Slave 之分儡羔,有時(shí)還需要 Balance Server 等等宣羊。更重要的是璧诵,這么多臺(tái)機(jī)器之間都是需要相互溝通的。那么在正式部署前進(jìn)行實(shí)況模擬就是很有必要的了仇冯。

這時(shí)就正是Vagrant的英雄用武之地之宿,這可是Vagrant的“殺手級(jí)功能”郭脂。重頭戲登場(chǎng)驰唬!

我們來(lái)架設(shè)一臺(tái)Web Server,一臺(tái)Master Database + 一臺(tái)Slave Database 的組合稍计。

在Vagrantfile設(shè)定文件里改成這樣:

Vagrant.configure("2") do |config|

  config.vm.define :web do |web|
web.vm.box = "CentOS-64"
web.vm.network :private_network, ip: "66.66.66.10"
  end

  config.vm.define :db0 do |db|
db.vm.box = "CentOS-64"
db.vm.network :private_network, ip: "66.66.66.20"
  end

  config.vm.define :db1 do |db|
db.vm.box = "CentOS-64"
db.vm.network :private_network, ip: "66.66.66.21"
  end

end

各項(xiàng)設(shè)定如同上述泼舱,只是名稱分別使用了“web”等缀、“db0”、“db1”娇昙,并且設(shè)定了不同的IP尺迂。

然后我們使用vagrant up啟動(dòng),可以看到跑出來(lái)很多行信息冒掌,注意到每行前面都有類似“[web]”枪狂、“[db0]”這樣的開頭,表示各自是哪一臺(tái)機(jī)器宋渔。信息流停止后,表示我們的虛擬機(jī)組合跑起來(lái)了辜限!

SSH可以指定連到哪一臺(tái)去:

vagrant ssh web

vagrant ssh db0
酷得一塌糊涂盎始稹!薄嫡!

再來(lái)看看各臺(tái)虛擬機(jī)之間的連通氧急。

先進(jìn)去到Web Server:

vagrant ssh web
在web機(jī)器里連接db0:

ssh 66.66.66.20
輕而易舉大功告成!

還有更牛的東西在后頭呢毫深。Vagrant允許你單獨(dú)啟動(dòng)組合里某一臺(tái)虛擬機(jī)吩坝,例如:

vagrant up web
只啟動(dòng)了Web Server,Database 機(jī)器并沒有啟動(dòng)哑蔫。

Vagrant甚至允許你在啟動(dòng)時(shí)使用正則表達(dá)式:

vagrant up /db[0-9]/
現(xiàn)在你啟動(dòng)全部Database Server了钉寝,即使你有db0,db1,db2...db9 這么多臺(tái)也沒問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闸迷,一起剝皮案震驚了整個(gè)濱河市嵌纲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腥沽,老刑警劉巖逮走,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異今阳,居然都是意外死亡师溅,警方通過(guò)查閱死者的電腦和手機(jī)茅信,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)墓臭,“玉大人蘸鲸,你說(shuō)我怎么就攤上這事∑鸨悖” “怎么了棚贾?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)榆综。 經(jīng)常有香客問我妙痹,道長(zhǎng),這世上最難降的妖魔是什么鼻疮? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任怯伊,我火速辦了婚禮,結(jié)果婚禮上判沟,老公的妹妹穿的比我還像新娘耿芹。我一直安慰自己,他們只是感情好挪哄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布吧秕。 她就那樣靜靜地躺著,像睡著了一般迹炼。 火紅的嫁衣襯著肌膚如雪砸彬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天斯入,我揣著相機(jī)與錄音砂碉,去河邊找鬼。 笑死刻两,一個(gè)胖子當(dāng)著我的面吹牛增蹭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磅摹,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼滋迈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了户誓?” 一聲冷哼從身側(cè)響起杀怠,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厅克,沒想到半個(gè)月后赔退,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年硕旗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窗骑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漆枚,死狀恐怖创译,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墙基,我是刑警寧澤软族,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站残制,受9級(jí)特大地震影響立砸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜初茶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一颗祝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恼布,春花似錦螺戳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至爽待,卻和暖如春损同,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堕伪。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栗菜,地道東北人欠雌。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疙筹,于是被迫代替她去往敵國(guó)和親富俄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1而咆,介紹Vagrant 我們做web開發(fā)的時(shí)候經(jīng)常要安裝各種本地測(cè)試環(huán)境霍比,比如apache,php,mysql,r...
    meng_philip123閱讀 2,522評(píng)論 0 12
  • [Vagrant入門一(轉(zhuǎn))]閱讀目錄VirtualBox安裝Vagrant安裝Vagrant配置links 原文...
    漢相蕭何閱讀 927評(píng)論 0 0
  • Vagrant學(xué)習(xí)筆記 簡(jiǎn)介 vagrant用于快速創(chuàng)建基于VirtualBox、VMware暴备、AWS的虛擬機(jī)悠瞬,提...
    200cc閱讀 8,419評(píng)論 0 15
  • 相見歡-閨閣憶 臥窗聽雨無(wú)言,夢(mèng)非暄。 夢(mèng)醒拈絲羅扇繡雙鴛浅妆。 相思重望迎,何時(shí)從,又憑軒凌外。 小院焚香紅袖飾翩翩辩尊。 --...
    景黎閱讀 340評(píng)論 0 3
  • 76摄欲、那些感動(dòng) 今晚,小灶一班舉行了9月的頒獎(jiǎng)典禮疮薇。 盡管那些故事和貓友們的視頻都提前看過(guò)很多遍胸墙,卻還是在每一次看...
    牛牛的Annie閱讀 320評(píng)論 7 14