Vagrant 是一款用來構建虛擬開發環境的工具,常適合 php/python/ruby/java 這類語言開發 web 應用。php
統一環境
:咱們能夠經過 Vagrant 封裝一個 Linux 的開發環境,分發給團隊成員。成員能夠在本身喜歡的桌面系統(Mac/Windows/Linux)上開發程序,代碼卻能統一在封裝好的環境裏運行。「代碼在我機子上運行沒有問題」這種說辭將成爲歷史。html
節省時間
:重裝電腦後直接使用封裝好的環境便可,無需從新配置開發環境。而若是讓每一個開發人員都本身去搭建本地環境,安裝虛擬機、下載ISO鏡像、選擇規格安裝建立vm、安裝OS、配置環境,會耗費很是多的時間。java
建立環境副本
:咱們有時候須要向操做系統安裝軟件,但又怕安裝失敗對開發環境形成污染最終放棄。有了Vagrant你能夠將當前開發環境打包成Box,用這個Box新建立一個Vagrant實例,而後在新實例中進行你想作的人和操做。python
Provider
:供應商,在這裏指Vagrant調用的虛擬化工具。Vagrant自己並無能力建立虛擬機,它是調用一些虛擬化工具來建立,如VirtualBox、VMWare、Xen、Docker,甚至AWS,這些虛擬化工具只要安裝好了,vagrant會自動封裝在底層經過統一的命令調用。也就是說使用vagrant時你電腦上還須要安裝對應的Provider,默認是免費開源的virtualbox。nginx
Box
:可被Vagrant直接使用的虛擬機鏡像文件,大小根據內容的不一樣從200M-2G不等。針對不一樣的Provider,Box文件的格式是不同的,從 vagrantcloud.com 你能夠找到社區維護的box。web
Vagrantfile
:Vagrant根據Vagrantfile中的配置來建立虛擬機,是Vagrant的核心。在Vagrantfile文件中你須要指明使用哪一個Box(能夠下載好的或本身製做,或指定在線的URL地址),虛擬機使用的內存大小和CPU,須要預安裝哪些軟件,虛擬機的網絡配置,與host的共享目錄等。shell
Provisioner
:是Vagrant的插件的一種。大部分現成的box並非你正好想要的,經過使用你熟悉的provisioner,好比Puppet,能夠在你使用vagrant up啓動虛擬機時自動的安裝軟件、修改配置等初始化操做。固然你也能夠在最早啓動虛擬機後,使用vagrant ssh進去而後手動安裝軟件,但畢竟不是全部人都是系統管理員,寫好Vagrantfile後無需人工干預立刻就可使用vm。目前支持並實現的provisioning有Puppet、Salt、Ansible、Chef這些知名的自動化運維工具,固然須要必定的使用經驗;也可使用shell provisioner,故名思議這個插件就是經過執行shell命令完成統一的做用。apache
Guest Additions
:這個是常在下載 base box 介紹裏有的,通常用來實現host到vm的端口轉發、目錄共享,在開發環境上都建議裝上以便測試。ubuntu
虛擬機仍是得依靠 VirtualBox 來搭建,免費小巧,有Mac OS/Windows/Linux版本。 segmentfault
下載地址:https://www.virtualbox.org/wi...
提示:雖然 Vagrant 也支持 VMware,不過 VMware 是收費的,對應的 Vagrant 版本也是收費的
Vagrant支持Max OS、Windows、CentOS以及基於Debian的發行版本Ubuntu
下載地址:https://www.vagrantup.com/dow...
官方box: https://atlas.hashicorp.com/b... 暫時只看到搜索名稱,無法下載
第三方box: http://www.vagrantbox.es/ 提供了各發行版/provider的下載連接,貌似官方的url也有
命令:vagrant box add {box-name} {box-url}
舉例:
vagrant box add ubuntuBox ~/Downloads/ubuntu.box //添加本地Box
查看Box列表:vagrant box list
刪除Box:vagrant box remove {box-name}
命令:vagrant init {box-name}
舉例:
vagrant init ubuntuBox
執行init命令後,會在當前文件夾建立一個Vagrant配置文件Vagrantfile
。
命令:vagrant up
舉例:
注:執行up命令前需先cd到Vagrant目錄
vagrant up
執行up命令後,終端會輸出一系列啓動信息,第一次啓動會花費幾分鐘時間。
命令:vagrant ssh
舉例:
注:Vagrant實例的用戶名密碼默認都爲「vagrant
」
vagrant ssh
執行ssh命令就至關於使用vagrant身份登陸實例,你能夠對操做系統進行操做,好比安裝LNMP環境。
注:修改完後執行vagrant reload
重啓虛擬機生效配置文件。
爲了在Host機上經過瀏覽器訪問Vagrant虛擬機,須要給虛擬機配置一個IP地址。使用文本編輯器修改Vagrant的Vagrantfile
,以下:
config.vm.network :private_network, ip: "192.168.33.10"
重啓虛擬機後就能夠在瀏覽器經過192.168.33.10
就能夠訪問。
由於咱們在Host機上開發,那麼編寫代碼時若是將修改同步到虛擬機實時查看效果呢?咱們能夠配置共享文件夾來實現,修改Vagrantfile
:
config.vm.synced_folder "/Users/Sam/Code/web/", "/web", create:true, :owner => "vagrant", :group => "www-data", :mount_options => ["dmode=775","fmode=664"]
配置解釋:
config.vm.synced_folder host_folder
vagrant_folder
第一個參數是Host機的文件夾路徑,若是你填寫的是相對路徑的話,則文件夾是相對於當前虛擬機目錄。
第二個參數是虛擬機的文件夾路徑,這個路徑必須是絕對路徑。
可選參數:
create:Bool值。當Host機目錄不存在是,是否自動建立。
group:虛擬機文件夾所屬用戶組。
owner:虛擬機文件夾所屬用戶。
disabled:Bool值。是否禁用。
mount_options:掛載參數。
命令 | 功能 |
---|---|
vagrant init | 初始化虛擬機 |
vagrant up | 啓動虛擬機 |
vagrant halt | 關閉虛擬機 |
vagrant reload | 重啓虛擬機 |
vagrant ssh | 登陸虛擬機 |
vagrant status | 查看虛擬機運行狀態 |
vagrant destroy | 銷燬虛擬機 |
vagrant box list | 查看本地Box列表 |
vagrant box add | 添加Box |
vagrant box remove | 刪除Box |
vagrant package | 打包虛擬機成Box |
使用 Apache/Nginx 時會出現諸如圖片修改後但頁面刷新仍然是舊文件的狀況,是因爲靜態文件緩存形成的。須要對虛擬機裏的 Apache/Nginx 配置文件進行修改:
#Apache 配置(httpd.conf 或者 apache.conf)添加: EnableSendfile off #Nginx 配置(nginx.conf)添加: sendfile off;
使用 Vagrant 打造跨平臺開發環境 https://segmentfault.com/a/11...
使用Vagrant打造統一的開發環境 https://www.zybuluo.com/gabe/...
在 Mac/win7 下上使用 Vagrant 打造本地開發環境 https://segmentfault.com/a/11...