以前學習Docker的時候,發現了Vagrant,感受這也是一個挺方便的技術,可是我下載安裝完Vagrant的時候,發現剛好VirtualBox發了新版本,Vagrant還沒兼容,因此這篇文章一直拖到了如今。昨天正好Vagrant更新了版本,修復了這個問題,因此不說了,咱們直接開始吧。html
Vagrant是一門基於虛擬化技術的工具,能夠幫助咱們快速搭建開發環境,而且能夠在不一樣系統之間共享。可能你們看到了虛擬化技術就會想到Docker,可是Docker和Vagrant是不同的。Docker是半虛擬化的容器技術,主要做用是分發已經開發好的程序。而Vagrant則是基於虛擬機的,主要做用就是快速啓動一個虛擬機,而後自動將咱們的項目同步到虛擬機中運行,主要目標就是幫助咱們搭建開發環境。python
Vagrant是基於虛擬機的,因此天然首先須要安裝虛擬機。Vagrant與VMware的集成組件是收費的,而VirtualBox和HyperV是免費的,因此通常咱們安裝VirtualBox就能夠了。git
安裝方法很簡單,到官網下載VirtualBox便可。shell
若是你使用Chocolatey的話,還能夠直接使用命令行安裝。bootstrap
choco install vagrant -y
安裝好了VirtualBox,就能夠開始安裝Vagrant了。安裝方法很簡單,官網下載便可,可是下載速度可能比較慢,並且因爲Vagrant沒有國內鏡像站,因此安裝完以後下載虛擬機鏡像的時候也會很慢。所以最好確保有比較通暢的網絡代理。ubuntu
安裝完vagrant以後,在系統的PATH變量中應該已經添加了vagrant命令。而後咱們就能夠建立項目了。因爲Ubuntu算是使用最普遍的系統了,因此建立項目的時候指定Ubuntu系統就能夠了,固然這裏也能夠指定其餘系統,CentOS、Fedora、Arch等系統也都是支持的。ruby
mkdir vagrant_sample cd vagrant_sample vagrant init ubuntu/bionic64
項目建立完成以後,應該會看到一個名爲Vagrantfile
的配置文件,它指定了Vagrant的各項配置,包括使用的虛擬機位置、內存大小、磁盤大小、要使用的鏡像名稱、客戶機端口號等等。具體配置等到用到的時候咱們在看吧。bash
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64"
若是在建立項目的時候沒有指定系統,也能夠在建立完項目以後用下面的命令來添加系統鏡像。在Vagrant中系統鏡像被稱做box。網絡
vagrant box add ubuntu/bionic64
若是想查找更多box,能夠在Vagrant Cloud在線查找box,須要的話也能夠尋找一些已經預裝了開發環境的定製box。app
第一次啓動Vagrant的話須要下載系統鏡像,默認下載速度比較慢。因此若是你有代理的話,最好設置一下,這樣能夠加快下載速度。若是你用的是cmd的話,就用下面的命令。
set http_proxy=127.0.0.1:1080 set https_proxy=127.0.0.1:1080
若是你用的是git bash的話,就用下面的命令。
export http_proxy=127.0.0.1:1080 export https_proxy=127.0.0.1:1080
若是運行鏡像內部的命令時也遇到了速度慢的問題,能夠安裝vagrant的代理插件並設置,它會自動設置虛擬機內部的代理。首先安裝插件:
vagrant plugin install vagrant-proxyconf
而後在Vagrant配置文件中添加下面的配置,固然代理要改爲你本身的。
Vagrant.configure("2") do |config| if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = "http://localhost:10800" config.proxy.https = "http://localhost:10800/" config.proxy.no_proxy = "localhost,127.0.0.1,.example.com" end # ... other stuff
主要有一下四個命令:
vagrant up
,啓動虛擬機。vagrant halt
,正常關閉虛擬機。vagrant suspend
,掛起虛擬機。vagrant destroy
,刪除虛擬機。咱們使用vagrant up
就能夠啓動虛擬機了。
好了,如今就能夠開發項目了。直接按照習慣,在項目文件夾中開發項目便可。好比說,我簡單新建了一個Python文件:
#! /usr/bin/env python3 import platform print(platform.platform())
而後就可使用vagrant ssh
命令切換進入虛擬機環境了。Vagrant會自動將項目文件夾複製到虛擬機的/vagrant
目錄中,因此咱們直接切換到該目錄下,而後就能夠執行腳本了。
在Vagrant能夠進行各類操做,就像在真的開發環境中同樣。咱們不用關心宿主機中是否安裝有必須軟件,反正只要box中安裝配置好就能夠了。這和Docker具備相似的優勢。
開發項目的時候可能須要一些必要步驟,咱們能夠將它編寫成啓動腳本,這樣當Vagrant啓動虛擬機的時候,就會自動執行這個腳本,完成配置工做。有了啓動腳本,咱們的開發環境就是可移植的了,不論是誰只要有了項目,就能夠一鍵搭建出開發環境了。
設置啓動腳本很簡單,首先建立一個shell腳本文件,例如bootstrap.sh
,而後在其中編寫開發環境須要的命令,例如用apt安裝某些軟件,用git克隆一些項目等等。
腳本編寫完以後,須要在Vagrant配置文件中添加好腳本的配置項。
Vagrant.configure("2") do |config| # 如下這一行是重點 config.vm.provision :shell, path: "bootstrap.sh" end
這樣,之後運行vagrant up
命令的時候,就會自動調用bootstrap.sh
腳本, 完成環境的配置工做。
我以爲Vagrant是一個很是方便的工具,假如團隊中開發環境的配置比較麻煩,能夠考慮利用Vagrant,它能夠很方便的爲各個成員設置相同的開發環境。假如說你須要在Windows環境下開發Linux軟件,也能夠利用Vagrant輕鬆搭建Linux開發環境,並在本地和虛擬機之間同步文件。