vagrant

什么是Vagrant
簡單來說,Vagrant 就是一個虛擬機(jī)的集成管理器。

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

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

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

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

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

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

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

vagrant box add CentOS-64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
這樣Vagrant就會下載這個box,下載完成后添加到自己的box列表里。可以用:

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

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

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

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

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目錄生成了一個“Vagrantfile”的設(shè)定文件。全部的設(shè)定都在這個文件里,我們先不管,以后再研究?,F(xiàn)在先讓虛擬機(jī)跑起來!

輸入命令:

vagrant up
稍微等待一段時間后,我們就會看到Vagrant會輸出很多行信息:

<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ī)那樣開一個ftp軟件,輸入ip、帳號、密碼去連接嗎?No!

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

另外,虛擬機(jī)已經(jīng)有一個/vagrant目錄,和我所在的vm目錄是直接映射的。vm里的任何文件都能在/vagrant目錄里看到和使用??岚??

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

vagrant package
稍等一點(diǎn)時間后,Vagrant會在vm目錄下輸出一個package.box的文件。沒錯,這完全跟我們在上面vagrantbox.es下載的box文件一樣的,實(shí)際上那里熱心人分享的box文件都是這么來的。所以可以用同樣的方法添加到box列表里去,例如:

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

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

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

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

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

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

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

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

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

這個設(shè)定非常牛,它會把Host機(jī)器(就是安裝Vagrant的機(jī)器)的8080端口轉(zhuǎn)發(fā)(forwoard)到虛擬機(jī)的80端口。例如你部署到虛擬機(jī)的網(wǎng)站運(yùn)行后,當(dāng)你在Host機(jī)器上瀏覽器打開http://localhost:8080后,就會自動轉(zhuǎn)到虛擬機(jī)正在運(yùn)行的Apache或Nginx 80端口服務(wù),也就是訪問部署的網(wǎng)站。實(shí)際上,這個功能是架起了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

這兩個是設(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"]
這個可以手工設(shè)定虛擬機(jī)使用多少內(nèi)存,根據(jù)你自己情況來定就好。類似Linux這樣的Server,一般512就夠了。

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

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

這時就正是Vagrant的英雄用武之地,這可是Vagrant的“殺手級功能”。重頭戲登場!

我們來架設(shè)一臺Web Server,一臺Master Database + 一臺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啟動,可以看到跑出來很多行信息,注意到每行前面都有類似“[web]”、“[db0]”這樣的開頭,表示各自是哪一臺機(jī)器。信息流停止后,表示我們的虛擬機(jī)組合跑起來了!

SSH可以指定連到哪一臺去:

vagrant ssh web

vagrant ssh db0
酷得一塌糊涂?。?!

再來看看各臺虛擬機(jī)之間的連通。

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

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

ssh 66.66.66.20
輕而易舉大功告成!

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容