vagrant入門

[Vagrant入門一(轉)]
閱讀目錄
VirtualBox安裝
Vagrant安裝
Vagrant配置
links

原文: https://github.com/astaxie/Go-best-practice/blob/master/ebook/zh/01.2.md
1.2 Vagrant安裝配置
實際上Vagrant只是一個讓你可以方便設置你想要的虛擬機的便攜式工具,它底層支持VirtualBox、VMware甚至AWS作為虛擬機系統,本書中我們將使用VirtualBox來進行說明,所以第一步需要先安裝Vagrant和VirtualBox。
回到頂部
VirtualBox安裝
VirtualBox是Oracle開源的虛擬化系統,它支持多個平臺,所以你可以到官方網站:https://www.virtualbox.org/wiki/Downloads/ 下載適合你平臺的VirtualBox最新版本并安裝,它的安裝過程都很傻瓜化,一步一步執行就可以完成安裝了。
回到頂部
Vagrant安裝
最新版本的Vagrant已經無法通過gem
命令來安裝,因為依賴庫太多了,所以目前無法使用gem
來安裝,目前網絡上面很多教程還是類似這樣的命令,那些都是錯誤的。目前唯一安裝的辦法就是到官方網站下載打包好的安裝包:http://www.vagrantup.com/downloads.html 他的安裝過程和VirtualBox的安裝一樣都是傻瓜化安裝,一步一步執行就可以完成安裝。
盡量下載最新的程序,因為VirtualBox經常升級,升級后有些接口會變化,老的Vagrant可能無法使用。

要想檢測安裝是否成功,可以打開終端命令行工具,輸入vagrant
,看看程序是不是已經可以運行了。如果不行,請檢查一下$PATH里面是否包含vagrant
所在的路徑。
回到頂部
Vagrant配置
當我們安裝好VirtualBox和Vagrant后,我們要開始考慮在VM上使用什么操作系統了,一個打包好的操作系統在Vagrant中稱為Box,即Box是一個打包好的操作系統環境,目前網絡上什么都有,所以你不用自己去制作操作系統或者制作Box:vagrantbox.es上面有大家熟知的大多數操作系統,你只需要下載就可以了,下載主要是為了安裝的時候快速,當然Vagrant也支持在線安裝。
建立開發環境目錄
我的開發機是Mac,所以我建立了如下的開發環境目錄,讀者可以根據自己的系統不同建立一個目錄就可以:

/Users/astaxie/vagrant

下載box
前面講了box是一個操作系統環境,實際上它是一個zip包,包含了Vagrant的配置信息和VirtualBox的虛擬機鏡像文件.我們這一次的實戰使用官方提供了一個box:Ubuntu lucid 64http://files.vagrantup.com/lucid64.box
當然你也可以選一個自己團隊在用的系統,例如CentOS、Debian等,我們可以通過上面說的地址下載開源愛好者們制作好的box。當然你自己做一個也行,下一節我會講述如何自己制作包。
添加box
添加box的命令如下:

vagrant box add base 遠端的box地址或者本地的box文件名

vagrant box add
是添加box的命令
base
是box的名稱,可以是任意的字符串,base
是默認名稱,主要用來標識一下你添加的box,后面的命令都是基于這個標識來操作的。
例子:

vagrant box add base http://files.vagrantup.com/lucid64.boxvagrant box add base https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.boxvagrant box add base CentOS-6.3-x86_64-minimal.boxvagrant box add "CentOS 6.3 x86_64 minimal" CentOS-6.3-x86_64-minimal.box

我在開發機上面是這樣操作的,首先進入我們的開發環境目錄/Users/astaxie/vagrant
,執行如下的命令

vagrant box add base lucid64.box

安裝過程的信息:

Downloading or copying the box...Extracting box...te: 47.5M/s, Estimated time remaining: --:--:--)Successfully added box 'base' with provider 'virtualbox'!

box中的鏡像文件被放到了:/Users/astaxie/.vagrant.d/boxes/
,如果在window系統中應該是放到了:C:\Users\當前用戶名.vagrant.d\boxes
目錄下。
通過vagrant box add
這樣的方式安裝遠程的box,可能很慢,所以建議大家先下載box到本地再執行這樣的操作。
初始化
初始化的命令如下:

vagrant init

如果你添加的box名稱不是base,那么需要在初始化的時候指定名稱,例如

vagrant init "CentOS 6.3 x86_64 minimal"

初始化過程的信息:

A `Vagrantfile` 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.

這樣就會在當前目錄生成一個 Vagrantfile
的文件,里面有很多配置信息,后面我們會詳細講解每一項的含義,但是默認的配置就可以開箱即用。
啟動虛擬機
啟動虛擬機的命令如下:

vagrant up

啟動過程的信息:

Bringing machine 'default' up with 'virtualbox' provider...[default] Importing base box 'base'...[default] Matching MAC address for NAT networking...[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] Mounting shared folders...[default] -- /vagrant

連接到虛擬機
上面已經啟動了虛擬機,之后我們就可以通過ssh來連接到虛擬機了。比如在我的開發機中可以像這樣來連接:

vagrant ssh

連接到虛擬機后的信息如下:

Linux lucid64 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/LinuxUbuntu 10.04.4 LTSWelcome to the Ubuntu Server! * Documentation: http://www.ubuntu.com/server/docNew release 'precise' available.Run 'do-release-upgrade' to upgrade to it.Welcome to your Vagrant-built virtual machine.Last login: Fri Sep 14 07:31:39 2012 from 10.0.2.2

這樣我們就可以像連接到一臺服務器一樣進行操作了。
window機器不支持這樣的命令,必須使用第三方客戶端來進行連接,例如putty、Xshell4等.putty為例:主機地址: 127.0.0.1端口: 2222用戶名: vagrant密碼: vagrant

系統信息
進入系統之后我們可以看一下系統的基礎信息:

vagrant@lucid64:/vagrant$ df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/lucid64-root 78G 945M 73G 2% /none 179M 176K 179M 1% /devnone 184M 0 184M 0% /dev/shmnone 184M 64K 184M 1% /var/runnone 184M 0 184M 0% /var/locknone 184M 0 184M 0% /lib/init/rwnone 78G 945M 73G 2% /var/lib/ureadahead/debugfs/dev/sda1 228M 17M 199M 8% /boot/vagrant 298G 76G 222G 26% /vagrant

/vagrant
這個目錄是自動映射的,被映射到/Users/astaxie/vagrant
,這樣就方便我們以后在開發機中進行開發,在虛擬機中進行運行效果測試了。
Vagrantfile配置文件詳解
在我們的開發目錄下有一個文件Vagrantfile
,里面包含有大量的配置信息,主要包括三個方面的配置,虛擬機的配置、SSH配置、Vagrant的一些基礎配置。Vagrant是使用Ruby開發的,所以它的配置語法也是Ruby的,但是我們沒有學過Ruby的人還是可以跟著它的注釋知道怎么配置一些基本項的配置。
box設置

config.vm.box = "base"

上面這配置展示了Vagrant要去啟用那個box作為系統,也就是上面我們輸入vagrant init Box名稱
時所指定的box,如果沒有輸入box名稱的話,那么默認就是base
,VirtualBox提供了VBoxManage這個命令行工具,可以讓我們設定VM,用modifyvm
這個命令讓我們可以設定VM的名稱和內存大小等等,這里說的名稱指的是在VirtualBox中顯示的名稱,我們也可以在Vagrantfile中進行設定,在Vagrantfile中加入如下這行就可以設定了:

config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--name", "astaxie", "--memory", "512"]end

這行設置的意思是調用VBoxManage的modifyvm
的命令,設置VM的名稱為astaxie
,內存為512MB。你可以類似的通過定制其它VM屬性來定制你自己的VM。

網絡設置
Vagrant有兩種方式來進行網絡連接,一種是host-only(主機模式),意思是主機和虛擬機之間的網絡互訪,而不是虛擬機訪問internet的技術,也就是只有你一個人自High,其他人訪問不到你的虛擬機。另一種是Bridge(橋接模式),該模式下的VM就像是局域網中的一臺獨立的主機,也就是說需要VM到你的路由器要IP,這樣的話局域網里面其他機器就可以訪問它了,一般我們設置虛擬機都是自high為主,所以我們的設置一般如下:

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

這里我們虛擬機設置為hostonly,并且指定了一個IP,IP的話建議最好不要用192.168..
這個網段,因為很有可能和你局域網里面的其它機器IP沖突,所以最好使用類似11.11..
這樣的IP地址。

hostname設置
hostname的設置非常簡單,Vagrantfile中加入下面這行就可以了:

config.vm.hostname = "go-app"

設置hostname
非常重要,因為當我們有很多臺虛擬服務器的時候,都是依靠hostname
來做識別的,例如Puppet或是Chef,都是通過hostname
來做識別的,既然設置那么簡單,所以我們就別偷懶,設置一個。

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

config.vm.synced_folder "/Users/astaxie/data", "/vagrant_data"

上面這個設定,第一個參數是主機的目錄,第二個參數是虛擬機掛載的目錄

端口轉發

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

上面這句配置可厲害了,這一行的意思是把對host機器上8080端口的訪問請求forward到虛擬機的80端口的服務上,例如你在你的虛擬機上使用nginx跑了一個Go應用,那么你在host機器上的瀏覽器中打開http://localhost:8080
時,Vagrant就會把這個請求轉發到VM里面跑在80端口的nginx服務上,因此我們可以通過這個設置來幫助我們去設定host和VM之間,或是VM和VM之間的信息交互。

修改完Vagrantfile的配置后,記得要用vagrant reload
命令來重啟VM之后才能使用VM更新后的配置

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容