Vagrant是一個基於Ruby的工具,用於建立和部署虛擬化開發環境。它 使用Oracle的開源VirtualBox虛擬化系統,使用 Chef建立自動化虛擬環境。html
1.1 項目初始化
Vagrant使用Vagrantfile
文件做爲配置文件,該文件中定義了項目的根目錄,Vagrant的不少配置都是基於這個配置的根目錄進行的,同時,該文件也描述了項目運行所須要的機器類型以及其它資源(好比安裝哪些軟件等)。git
要初始化一個Vagrant項目,使用命令vagrant init
命令,使用該命令後,會在當前目錄建立一個名爲Vagrantfile
的配置文件,修改該文件改變Vagrant項目的行爲。shell
- $ mkdir vagrant_getting_started
- $ cd vagrant_getting_started
- $ vagrant init
Vagrant使用盒子(box)建立開發環境,所謂的盒子就是一個已經配置好的基礎的虛擬機鏡像,Vagrant避免了每次建立項目都去從新建立虛擬機,而是按照Vagrantfile
文件的配置從基礎鏡像建立這個Box。apache
能夠在已經存在的項目上使用
vagrant init
命令,該命令只會建立配置文件,並不會對原有項目形成影響。若是須要,能夠將該配置文件Vagrantfile
加入到項目的版本控制中,這樣團隊中的其它開發者就能夠快速的創建起開發環境已進行運行調試了。bootstrap
在建立Vagrant項目的時候,首先須要作的是添加一個Box,經過使用命令vagrant box add
添加一個box,Vagrant網站上提供了不少其它開發者共享的Box,咱們能夠直接複用,在Vagrant Cloud上能夠查找你須要的Box而且添加到本地。centos
- $ vagrant box add chef/centos-6.5
添加的盒子是能夠被多個項目同時使用的,項目在初始化Box的時候並不會修改添加的基礎Box,而是克隆一份Box的副本,在副本上進行配置。bash
添加盒子以後,咱們須要配置項目使用這個盒子做爲基礎,修改Vagrantfile
文件:網絡
- Vagrant.configure("2") do |config|
- config.vm.box = "chef/centos-6.5"
- end
注意: 若是這裏指定的box沒有添加過,則Vagrant會自動去下載該Box。app
1.2 啓動並運行項目
在配置完成後,就能夠啓動該虛擬環境了,使用命令vagrant up
啓動開發環境。ssh
- $ vagrant up
啓動以後,咱們可使用ssh鏈接到該虛擬機上:
- $ vagrant ssh
如今你已經鏈接到該虛擬機上了,你能夠像操做普通Linux系統同樣作你但願作的事情。
注意的是,在該虛擬機上進行
rm -fr /
操做的時候請謹慎一些,由於在該虛擬機中,掛載了/vagrant
目錄,該目錄是與你主機的項目共享的,刪除的話會將項目刪除掉。
在該虛擬機使用完成後,若是再也不須要了,可使用vagrant destroy
命令移除該虛擬機。
提示: 默認配置下,虛擬機中的
/vagrant
目錄與主機上的項目目錄是同一個目錄,該目錄中的全部操做都會自動同步。
1.3 建立項目初始化腳本
每次初始化系統的時候都須要從新安裝軟件是一件很是麻煩的事,所以,Vagrant提供了一種簡單的方式來幫咱們完成這個過程,在創建虛擬機的時候能夠指定自動執行腳本。
在項目目錄下建立一個bootstrap.sh的腳本文件:
- #!/usr/bin/env bash
- apt-get update
- apt-get install -y apache2
- rm -rf /var/www
- ln -fs /vagrant /var/www
該腳本是在Ubuntu環境下使用的,若是你是用的Box是CentOS,則不能使用apt-get
命令了,而應該使用yum
命令完成程序的安裝。
接下來,咱們須要配置Vagrantfile
文件,讓其在創建環境的時候自動執行該腳本。
- Vagrant.configure("2") do |config|
- config.vm.box = "hashicorp/precise32"
- config.vm.provision :shell, path: "bootstrap.sh"
- end
這樣配置以後,使用命令vagrant up
啓動虛擬機的時候,該腳本就會自動執行,完成虛擬機的初始化了。
若是你的虛擬機已經處於運行狀態了,能夠經過使用命令
vagrant reload --provision
快速的從新啓動虛擬機,命令中的--provision
告訴Vagrant在重啓的時候運行provisioners的配置,一般狀況下,provisioners的配置只在執行vagrant up
命令的時候纔會執行。
1.4 網絡配置
Vagrant提供了端口轉發功能,經過將虛擬機中的端口映射到主機的不一樣端口,咱們能夠在主機中使用映射後的端口訪問虛擬機中的服務。
例如:
- Vagrant.configure("2") do |config|
- config.vm.box = "hashicorp/precise32"
- config.vm.provision :shell, path: "bootstrap.sh"
- config.vm.network :forwarded_port, host: 4567, guest: 80
- end
使用如上配置啓動虛擬機以後,就能夠在主機上使用http://127.0.0.1:4567
訪問虛擬機上的Apache提供的Web服務了。
1.5 Teardown(虛擬機卸載)
當你但願切換到其它項目上開發或者是當你要出去吃午餐,你下班了的狀況下,你須要清理一下你的開發環境,這個時候,Vagrant提供了三種方式,它們各有各自的優缺點,所以,你須要本身去權衡你但願採用哪一種方式。
-
Suspending (掛起)
執行命令vagrant suspend
將會保存當前虛擬機的運行狀態而且中止它,跟主機掛起是同樣的,當你須要再次啓動的時候,使用vagrant up
命令將會恢復以前的運行狀態。這種方式的優勢是,啓動很迅速,能夠很快進入開發環境中,缺點是會佔用比較多的磁盤空間,由於虛擬機將內存中的數據都存儲到了磁盤上。 -
Halting(中止)
這種方式是正常的中止虛擬機,使用虛擬機的關閉命令完成,當須要從新使用的時候使用命令vagrant up
從新啓動虛擬機,該方法與計算機冷啓動同樣,缺點是啓動的時候耗時比較多,依然佔用部分磁盤空間。 -
Destroying(銷燬) 該方式將會銷燬虛擬機,不會再佔用磁盤空間,下次啓動的時候將會從新創建開發環境,包括下載軟件等等。