1. 程式人生 > >vagrant系列二:vagrant的配置檔案vagrantfile詳解

vagrant系列二:vagrant的配置檔案vagrantfile詳解

上一篇文章完整的講敘瞭如何安裝一個vagrant的環境。這裡主要說一說vagrant的配置檔案Vagrantfile。我在嘗試各種技術的時候,常常苦惱於很多時候沒有教程把相關的配置資訊說明完整。所以在我的部落格裡,我一定會完整的把這塊給補上。

一 配置詳解

在我們的開發目錄下有一個檔案Vagrantfile,裡面包含有大量的配置資訊,主要包括三個方面的配置,虛擬機器的配置、SSH配置、Vagrant的一些基礎配置。Vagrant是使用Ruby開發的,所以它的配置語法也是Ruby的,但是我們沒有學過Ruby的人還是可以跟著它的註釋知道怎麼配置一些基本項的配置。

box設定

config.vm.box = "CentOs7"

該名稱是再使用 vagrant init 中後面跟的名字。

hostname設定

config.vm.hostname = "for_work"

設定hostname非常重要,因為當我們有很多臺虛擬伺服器的時候,都是依靠hostname來做識別的。比如,我安裝了php7 php56兩臺虛擬機器,再啟動時,我可以通過vagrant up php7來指定只啟動哪一臺。

虛擬機器網路設定

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

Vagrant有兩種方式來進行網路連線,一種是host-only(主機模式),意思是主機和虛擬機器之間的網路互訪,而不是虛擬機器訪問internet的技術,也就是隻有你一個人自High,其他人訪問不到你的虛擬機器。另一種是Bridge(橋接模式),該模式下的VM就像是區域網中的一臺獨立的主機,也就是說需要VM到你的路由器要IP,這樣的話局域網裡面其他機器就可以訪問它了。我一般設定為host-only模式。
當然該模式,再指定ip的時候注意不要跟主機所在網段發生衝突。

同步目錄設定

config.vm.synced_folder  "/Users/helei/www", "/vagrant"

我們上面介紹過/vagrant目錄預設就是當前的開發目錄,這是在虛擬機器開啟的時候預設掛載同步的。我們還可以通過配置來設定額外的同步目錄。

埠轉發設定

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

上面這句配置可厲害了,這一行的意思是把對host機器上8080埠的訪問請求forward到虛擬機器的80埠的服務上,例如你在你的虛擬機器上使用nginx跑了一個php應用,那麼你在host機器上的瀏覽器中開啟http://localhost

時,Vagrant就會把這個請求轉發到VM裡面跑在80埠的nginx服務上,因此我們可以通過這個設定來幫助我們去設定host和VM之間,或是VM和VM之間的資訊互動。
個人不建議使用該方法,經常因為兩臺機子端口占用的問題,導致不能正常通訊。還是使用上面說的兩種網路方式進行設定吧。

上面說的配置方式,均是單機模式,下面說說如何進行叢集機器的部署與配置,這是vagrant讓我正真激動與興奮的地方。

看完下面,你會覺得超級簡單

現在我們來建立多臺VM跑起來,並且讓他們之間能夠相通訊,假設一臺是應用伺服器、一臺是redis伺服器,那麼這個結構在Vagrant中非常簡單,其實和單臺的配置差不多,你只需要通過config.vm.define來定義不同的角色就可以了,現在我們開啟配置檔案進行如下設定:

Vagrant.configure("2") do |config|
  config.vm.define :web do |web|
    web.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
    end
    web.vm.box = "CentOs7"
    web.vm.hostname = "web"
    web.vm.network :private_network, ip: "192.168.33.10"
  end

  config.vm.define :redis do |redis|
    redis.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--name", "redis", "--memory", "512"]
    end
    redis.vm.box = "CentOs7"
    redis.vm.hostname = "redis"
    redis.vm.network :private_network, ip: "192.168.33.11"
  end
end

這裡的的設定與設定單臺機器非常的類似,如果還需要機器,只需要再配置檔案中拷貝一下,然後重新載入一下這個配置檔案就ok啦。是不是非常容易?後面我打算學hadoop的時候,就用這種方式來試試。
現在只需要重新啟動一下vagrant up機器,你就會在虛擬機器中看到兩臺虛擬機器歡快的跑起來了。
然後這個時候,在使用vagrant ssh登入時,需要指明一下登入的是哪一臺機器就ok啦。

比如,我要登入到redis中去。

vagrant ssh redis

這麼簡單就完成登入了。登入成功後,可以使用ping命令,檢查一下機器之間是否能夠互相通訊。

好吧,本地有了如此利器,你想模擬那樣的伺服器架構,都可以完成了,只有你的單機足夠強大,你可以開20臺虛擬機器,請隨意。