Vagrant是一款用來構建虛擬開發環境的外掛工具,可以簡化虛擬機配置和管理。它底層支持VirtualBox、VMware、AWS等,非常適合使用php/python/ruby/java語言開發web應用,“代碼在我機子上運行沒有問題”這種說辭將成為歷史。
1. 安裝VirtualBox
去官網 https://www.virtualbox.org/wiki/Downloads 下載最新版的Virtualbox,然后雙擊安裝,一直點擊確認完成。
2. 安裝Vagrant
去官網 https://www.vagrantup.com/downloads.html 下載最新版的Vagrant,然后雙擊安裝,一直點擊確認完成。在windows下安裝vagrant,為了寫入相應配置到環境變量,系統可能會要求重新啟動。在命令行中,輸入vagrant,查看程序是不是已經運行了。如果不行,請檢查一下$PATH里面是否包含vagrant所在的路徑
add box的時候默認保存在C盤用戶文件夾 C:\Users\xxx.vagrant.d,通過設置VAGRANT_HOME環境變量改變默認位置
WIN
setx VAGRANT_HOME "X:/your/path"
setx VAGRANT_HOME "X:/your/path" /M (系統變量)
Linux
export VAGRANT_HOME='/path/to/vagrant_home'
參考
3. Vagrant命令詳解
命令 | 作用 |
---|---|
vagrant box add | 添加box的操作 |
vagrant init | 初始化box的操作,會生成vagrant的配置文件Vagrantfile |
vagrant up | 啟動本地環境 |
vagrant ssh | 通過ssh登錄本地環境所在虛擬機 |
vagrant halt | 關閉本地環境 |
vagrant suspend | 暫停本地環境 |
vagrant resume | 恢復本地環境 |
vagrant reload | 修改了Vagrantfile后,使之生效(相當於先 halt,再 up) |
vagrant destroy | 徹底移除本地環境 |
vagrant box list | 顯示當前已經添加的box列表 |
vagrant box remove | 刪除相應的box |
vagrant package | 打包命令,可以把當前的運行的虛擬機環境進行打包 |
vagrant plugin | 用於安裝卸載插件 |
vagrant status | 獲取當前虛擬機的狀態 |
vagrant global-status | 顯示當前用戶Vagrant的所有環境狀態 |
4. 使用Vagrant安裝配置虛擬機
4.1 box是什么?
接下來,我們需要選擇使用何種操作系統,這里以centos7.2為例。以前基於虛擬機的工作流,我們需要下載ISO鏡像,安裝系統,設置系統等操作。而Vagrant開源社區提供了許多已經打包好的操作系統,我們稱之為box。你可以從box下載地址(下文列出),找到你想要的box,當然你也可以自己制作一個。
- 官方倉庫:https://atlas.hashicorp.com/boxes/search
- 官方鏡像:https://vagrantcloud.com/boxes/search
- 第三方倉庫:http://www.vagrantbox.es/
4.2 如何安裝一個box?
我們需要建立自己的開發環境目錄:
$ mkdir -p /Users/jackyue/data/vagrant/centos7
$ cd /Users/jackyue/data/vagrant/centos7
Vagrant提供在線安裝服務,非常方便,但由於偉大的GFW,我們需要先FQ把box下載到本地,然后導入安裝。box鏈接:https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
以下是導入安裝說明:
$ vagrant box add {title} {url}
$ vagrant init {title}
$ vagrant up
vagrant box add是添加box的命令,{title}是以后創建虛擬機的別名,{url}是下載到本地box的路徑,也可以是服務器端的URL。
說明:將box鏡像添加到本地倉庫,有三種方式:
- 使用http絕對地址
vagrant box add precises64 http://files.vagrantup.com/precise64.box
- 使用本地文件(從協議來說,和上面一樣,相當於file:///協議的地址)
vagrant box add precises64 ./precise64.box
- 使用倉庫名稱
vagrant box add precises64 ubuntu/precise64
這種方式,vagrant會自動在中央倉庫查找鏡像,並下載到本地鏡像庫中。
vagrant box add ubuntu/precise64
省略本地鏡像名稱,則直接用中央倉庫中的鏡像名作為本地鏡像名,這樣做的好處是可以跟倉庫中的鏡像對應。
4.3 安裝centos7 box
$ cd /Users/jackyue/data/vagrant/centos7 //找到一個目錄,作為初始化目錄
$ vagrant box add centos7 /Users/jackyue/data/vagrant/centos/centos-7.0-x86_64.box //建議采取離線安裝,這樣有利於放置虛擬機文件到指定路徑
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7' (v0) for provider:
box: Unpacking necessary files from: file:///Users/jackyue/data/vagrant/vagrant-centos-7.2.box
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!
box中的鏡像文件被放到了/Users/jackyue/data/vagrant/.vagrant/machines/之下
4.4初始化鏡像
$ vagrant init centos7
//如果是新添加的box,必須執行本步驟,初始化一次之后,就不需要再執行本步驟
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.
初始化成功后,vagrant會在當前的初始化目錄生成一個Vagrantfile配置文件,我們可以修改它,進行個性化定制。在下一篇文章中,我們會具體講解關於Vagrantfile的配置。對於Vagrantfile文件,我們可以直接編寫,或者從網絡上拉取Vagrantfile文件后,作為虛擬機配置文件,如下:
$ mkdir -p ~/vm/coreos
$ cd ~/vm/coreos
$ git clone https://github.com/coreos/coreos-vagrant.git
4.5 啟動系統
$ vagrant up
// 第一次開啟的時候,建議一台一台地開啟,這樣的話方便記錄映射的本地端口號
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos7_default_1493108555390_12825
==> default: Clearing any previously set network interfaces...
4.6 SSH連接安裝的虛擬機
經過以上操作后,我們完成了centos7虛擬機的安裝,現在需要登錄虛擬機,進行操作,有以下三種方式:
在開發環境的目錄(有Vagrantfile的地方),登錄虛擬機
$ vagrant ssh
- 使用第三方工具,如secureCRT)或系統ssh命令進行登錄,IP為Vagrantfile中指定的hostonly地址,用戶名與密碼默認都是vagrant
- 在宿主機的命令行,ssh到本地端口的方式登錄。觀察客戶機的22端口映射到宿主機的是多少,一般是2200或者2222,用戶名與密碼默認都是vagrant
$ ssh -p 2222 127.0.0.1
5. 打包分發
當你配置好開發環境后,退出並關閉虛擬機。在終端里,對虛擬機打包
# vagrant halt // 在開發環境的目錄,關閉centos7
# vagrant status // 確認centos7關機
# vagrant package centos7 --output centos7.box --vagrantfile Vagrantfile
// --output NAME:(可選)設置通過NAME來指定輸出的文件名;--vagrantfile FILE:(可選)將Vagrantfile直接封進box中
注:如果網絡模式中使用private_network的話,在打包之前需要清除一下private_network的設置,避免不必要的錯誤:rm -f /etc/udev/rule.d/70-persistent-net.rules
打包完成后會在當前目錄生成一個centos7.box的文件,將這個文件分發給其他用戶(開發者)。
其他用戶只要添加這個 box ,並用其初始化自己的開發目錄,就能得到一個一模一樣的開發環境了。
# vagrant box add centos7 centos7.box
//添加package.box,鏡像命名為centos7
$ vagrant init centos7
// 初始化centos7鏡像
$ vagrant up