Vagrant是一款用來構建虛擬開發環境的外掛工具,可以簡化虛擬機配置和管理。它底層支持VirtualBox、VMware、AWS等,非常適合使用php/python/ruby/java語言開發web應用,“代碼在我機子上運行沒有問題”這種說辭將成為歷史。
安裝VirtualBox
去官網 https://www.virtualbox.org/wiki/Downloads 下載最新版的Virtualbox,然后雙擊安裝,一直點擊確認完成。
安裝Vagrant
去官網 https://www.vagrantup.com/downloads.html 下載最新版的Vagrant,然后雙擊安裝,一直點擊確認完成。在windows下安裝vagrant,為了寫入相應配置到環境變量,系統可能會要求重新啟動。在命令行中,輸入vagrant,查看程序是不是已經運行了。如果不行,請檢查一下$PATH里面是否包含vagrant所在的路徑
准備box
接下來,我們需要選擇使用何種操作系統,這里以centos7.2為例。以前基於虛擬機的工作流,我們需要下載ISO鏡像,安裝系統,設置系統等操作。而Vagrant開源社區提供了許多已經打包好的操作系統,我們稱之為box。你可以從box下載地址(下文列出),找到你想要的box,當然你也可以自己制作一個。
官方倉庫:https://atlas.hashicorp.com/boxes/search
官方鏡像:https://vagrantcloud.com/boxes/search
第三方倉庫:http://www.vagrantbox.es/(國內)
使用案例
-
安裝virtualbox,vagrant直接按照平常安裝軟件一樣即可。
-
安裝好后,進入磁盤目錄,任意磁盤都行,創建一個管理目錄。這里以vagrant目錄為例。同時推薦終端工具不適用windows自帶的dos,這里推薦xshell工具。
- 我們添加一個虛擬機,vagrant box add 。我這里把鏡像文件放在wamp64下面的。
https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
- 添加完之后,我們在查看當前的虛擬機,即可看到我們方才添加的虛擬機 vagrant box list
- 初始化虛擬機 vagrant init centos7。
- 此時我們查看vagrant目錄下面就會多一個名為Vagrantfile的配置文件。
(這個配置文件主要后期我們在對虛擬做修改時,直接修改該文件。)
- 開啟虛擬機 vagrant up
日志解釋
- 這時候看 VirtualBox,就能發現多了一台虛擬機(並且在運行中)
所在目錄將生成.vagrant文件夾,如下:
命令詳解
虛擬機管理
命令 | 作用 |
---|---|
vagrant box add [box_name] [box_path] | 添加box的操作 |
vagrant init | 初始化box的操作,會生成vagrant的配置文件Vagrantfile |
vagrant up [vm_name] | 啟動指定環境 (默認為本地) 0. (默認)在VirtualBox上啟動 1. 在vmware上: vagrant up –provider=vmware_fusion [vm_name] 2. 在AWS上: vagrant up –provider=aws [vm_name] |
vagrant ssh [vm_name] | 通過ssh登錄指定環境所在虛擬機(默認為本地) 通常情況下,vagrant在創建虛擬機的時候,內置了1個用戶: username: vagrant password: vagrant |
vagrant halt [vm_name] | 虛擬機關閉 (默認為本地) |
vagrant suspend [vm_name] | 虛擬機掛起 (默認為本地) |
vagrant resume | 恢復本地環境 |
vagrant reload [vm_name] | 虛擬機重啟 (默認為本地) 修改了Vagrantfile后,使之生效(相當於先 halt,再 up) |
vagrant destroy [vm_id] | 徹底銷毀虛擬機 (默認銷毀本地) 虛擬機刪除后,所有在虛擬機中做的改動都不再存在,慎用。 |
vagrant box list | 顯示當前已經添加的box列表 |
vagrant box remove [box_name] | 刪除相應的box |
vagrant package | 打包命令,可以把當前的運行的虛擬機環境進行打包 |
vagrant plugin | 用於安裝卸載插件 |
vagrant status | 獲取當前虛擬機的狀態 |
vagrant global-status | 顯示當前用戶Vagrant的所有環境狀態 |
快照管理
命令 | 作用 |
---|---|
vagrant snapshot save your_snapshot_name | 新建快照 |
vagrant snapshot list | 查看快照 |
vagrant snapshot restore your_snapshot_name | 恢復快照 |
vagrant snapshot delete your_snapshot_name | 刪除快照 |
配置鏡像位置
配置VirtualBox的鏡像文件存放位置
vagrant和VirtualBox安裝完成后,默認存放虛擬機鏡像文件的位置在系統盤,建議存儲在其他磁盤下,具體步驟如下:
- 打開VirtualBox,打開管理-> 全局設置 (快捷鍵是 Ctrl-G )
- 選擇 常規 里的 默認虛擬電腦位置(M)
- 設置為非系統盤的位置
配置vagrant的鏡像存儲位置
vagrant對於虛擬機的管理分成兩個部分:box和Machine
- box是指初始的未部署的虛擬機鏡像文件,這個文件相當於是虛擬機的一個模板,可以進行無限制次數的復制
- Machine指處於可運行狀態下的虛擬機
當使用 vagrant 添加 box(vagrant add)時,對於windows用戶,vagrant會默認將這些虛擬機模板鏡像文件存放在 c:\User\.Vagrant.d
文件夾下,當使用vagrant添加的box文件較多時,這個目錄將會變得非常大,建議轉移到其他磁盤分區
具體步驟如下:
- 將
c:\User\.vagrant.d
目錄移動到新的位置 - 設置VAGRANT_HOME 環境變量指向新的位置
windows用戶設置:
注:若在后續操作中發現設置未生效,嘗試重啟電腦讓新加入的環境變量生效。
或者查看是否配置成功
MAC用戶設置:
export VAGRANT_HOME='新位置路徑'
配置詳解
共享文件夾配置
vagrant提供了將本機目錄掛載到虛擬機目錄下的功能,默認是將vagrant配置文件所在目錄掛載到虛擬機/vagrant目錄下。
打開配置文件Vagrantfile,找到如下配置項:
config.vm.synced_folder
配置項如下:
config.vm.synced_folder
"your_folder"(必須) //物理機目錄,可以是絕對地址或相對地址,相對地址是指相對與vagrant配置文件所在目錄
,"vm_folder(必須)" // 掛載到虛擬機上的目錄地址
,create(boolean)--可選 //默認為false,若配置為true,掛載到虛擬機上的目錄若不存在則自動創建
,disabled(boolean):--可選 //默認為false,若為true,則禁用該項掛載
,owner(string):'www'--可選 //虛擬機系統下文件所有者(確保系統下有該用戶,否則會報錯),默認為vagrant
,group(string):'www'--可選 //虛擬機系統下文件所有組( (確保系統下有該用戶組,否則會報錯),默認為vagrant
,mount_options(array):["dmode=775","fmode=664"]--可選 dmode配置目錄權限,fmode配置文件權限 //默認權限777
,type(string):--可選 //指定文件共享方式,例如:'nfs',vagrant默認根據系統環境選擇最佳的文件共享方式
例子
config.vm.synced_folder
"D:/www/code"
, "/code"
, owner:"www"
, group:"www"
,create:true
,mount_options:["dmode=775","fmode=664"]
config.vm.synced_folder ".","/vagrant",disabled:true //禁用vagrant的默認共享目錄
網絡配置
vagrant提供了三種網絡配置方式:端口轉發(默認)、私有網絡、公有網絡,可以在 配置文件 Vagrantfile
進行網絡配置,推薦使用私有網絡。
端口轉發(forwarded ports)
- 定義
端口轉發指把宿主機的端口映射到虛擬機的某一個端口上,訪問宿主機端口時,請求實際是被轉發到虛擬機上指定端口的。
注:宿主機指運行虛擬機的物理機。 - 優點
容易實現外網訪問虛擬機 - 缺點
如果端口較少需要映射很容易,但是端口比較多時,就比較麻煩,例如:MySQL,redis,nginx等服務。
不支持在宿主機使用小於1024的端口來轉發,例如:不能使用SSL的443端口來進行https連接。 - 配置
在配置文件Vagrantfile下做如下編輯
注:若guest_ip和host_ip兩項配置為空,則局域網下的所有設備都可以訪問該虛擬機。Vagrant.configure("2") do |config| config.vm.network "forwarded_port"(必須) //端口轉發標識 , guest(必須): //虛擬機端口 , host(必須): //宿主機端口,值必須大於1024 ,guest_ip(可選): //虛擬機端口綁定虛擬機ip地址 ,host_ip(可選): //虛擬機端口綁定宿主機ip ,protocol(可選)://指定通信協議,可以使用tcp/udp,默認tcp ,auto_correct(可選)://true/false,若配置為true,則每次開啟虛擬機的時候自動檢查是否存在端口沖突 end
示例配置,如下Vagrant.configure("2") do |config| config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true end
私有網絡(private networks)
- 定義
私有網絡是指只有宿主機可以訪問虛擬機,如果多個虛擬機設定在同一個網段也可以互相訪問。 - 優點
安全,只有自己可以訪問 - 缺點
團隊成員不能訪問你的虛擬機 - 配置
配置如下:
注:私有ip可以自行指定config.vm.network "private_network"//必須 ,私有網絡標識 , ip: "192.168.33.10"
公有網絡(public networks)
-
定義
公有網絡是指設置虛擬機和宿主機有相同的網絡配置。 -
優點
方便團隊協作,別人可以訪問你的虛擬機 -
缺點
只有在有網絡的情況下才能訪問虛擬機 -
配置
Vagrant.configure("2") do |config| config.vm.network "public_network" //必須 公有網絡標識 ,ip(string): //可選,配置靜態ip ,bridge(string/array): "en1: Wi-Fi (AirPort)"//可選,設置橋接的網卡 end
Vagrant 中文文檔:http://tangbaoping.github.io/vagrant_doc_zh/v2/
參考: