簡介
一般來說,線上環境和預釋出環境都有充足的配置化,既可以清楚的確認環境的組成細節,又可以高效快速從0重建。但是個人的開發測試環境,可能就沒有這麼完美。也許是公司公用的幾臺測試機,也許是自己的本地環境。折騰出了問題,還是比較麻煩的。我個人認為,Docker做開發環境,也是差強人意,還是本地環境或是虛擬機器比較適合。
顯然、一個良好,可快速重新構建的開發環境,可以極大的提高自己的效率。(開發環境折騰壞了,是常有的事。如果能快速重建就很好了。)如果還能將你的環境,輕鬆分享給其他人。也可以解決“我那裡還能跑,為什麼到你這裡就跑不了”的經典問題。
而Vagrant
就是這樣一種工具,可以控制其他虛擬化工具比如VirtualBox
和VMware
,並且能配置檔案從0重建環境。而且也能和Ansible
、Chef
、Puppet
等自動化工具聯動。(如果其他環境使用上述自動化工具構建,那麼Vagrant
可以輕鬆重用。
最後,本文選用Win10
+ Virtualbox
+ Vagrant
作為基礎,在CentOS
系統中使用rpm
方式簡易安裝MySQL。
1、下載安裝
Vagrant的安裝方式和虛擬機器類似,除了軟體本身,還需要映象。Vagrant使用一種特殊的自制映象,以.box結尾。需要從官網或第三方資源處獲取。【注意,這種特殊鏡相區分虛擬機器工具,比如Virtuabox和VMware的映象不同】
- 軟體本體直接從官網下載即可:https://www.vagrantup.com/downloads
特殊映象有如下幾種獲取方式:
- Vagrant官網: https://app.vagrantup.com/boxes/search【速度較慢
- 作業系統官網: http://cloud.centos.org/centos/7/vagrant/x86_64/images/ 【這裡是centos的例子
- 第三方映象站:http://www.vagrantbox.es/ 【官網可能太慢,可以考慮從第三方站點獲取映象
這裡沒有說明虛擬化環境本身的安裝,VirtualBox或者VMware均可,直接從對應官網安裝即可。
2、基礎使用方法
2.1、快速上手:
Vagrant是命令列工具,安裝完之後,可以在powershell或者cmd中使用。想要快速啟動一個Vagrant虛擬機器,可以使用如下操作。
建議使用一個空資料夾進行操作,映象不一定要在這個目錄中。
小技巧:在資料夾空白處:Shift
+ 右鍵,即可在該位置開啟Powershell
或者cmd
vagrant box add [env_name] [url/path] # 匯入映象,這裡也可以使用本地下載好的映象路徑,不一定是url。
vagrant init [env_name] # 初始化。
vagrant up #啟動
vagrant ssh #ssh進入虛擬機器
通過上述幾條指令,就可以載入下載好的映象,初始化、並啟動一個虛擬機器、ssh進入虛擬機器。
第二步init要注意,命名和第一條命令的命名要一致。
win10也可安裝ssh,控制皮膚中可以開啟。
2.2、其他常用命令、注意點:
vagrant box add #新增基礎映象配置
vagrant init # 初始化虛擬機器(初始化後,可自行修改配置檔案進行定製
vagrant up # 建立並啟動虛擬機器
vagrant halt # 關閉虛擬機器
vagrant destroy #銷燬當前虛擬機器
vagrant status #檢視虛擬機器執行狀態
vagrant ssh # SSH 至虛擬機器
vagrant package #匯出映象
上述幾條命令,基本就可以輕鬆使用vagrant了。不過還有幾點需要注意:
- vagrant package 可以將自己的映象打包,即可輕鬆分享給其他人。(適用於變動較少的映象)
PS:更建議的方式是,共享基礎映象+vagrantfile配置檔案。直接分享配置檔案即可,更加快捷。(如果頻繁變動,直接編輯配置檔案會比較輕鬆,不要在映象裡手動修改,難以確認到底做了什麼) - vagrant destroy會銷燬例項,也就是virtualbox中看到的虛擬機器。但是不會銷燬配置,destroy之後,可以直接up重建。
- 預設使用者不是root,但是可以sudo執行命令,無需密碼。(如果有其他需要,自行修改即可。
- 隨時都可以用vagrant status確認虛擬機器狀態,是否啟動、停止等。
參考:https://blog.csdn.net/hel12he/article/details/51089774
3、更多定製化
vagrant init初始化結束後,會在當前目錄生成一個 Vagrantfile,你可以對其進行修改、實現各種定製化。
比如config.vm.network "private_network", ip: "192.168.33.10"
修改網路卡預設ip。
一個基礎的初始檔案很簡單,大概是這樣:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "MySQL-test00"
# 在這裡增加其餘配置項
end
根據根據需要,增加各種配置項即可。【比如網路卡採用橋接、cpu核數,記憶體等等。
更多配置項可以參考:https://www.vagrantup.com/docs/vagrantfile
也可實現一個配置檔案,啟動多個虛擬機器。只要都宣告正確即可。
其中,有幾個配置項我覺得比較重要:
- 網路卡/路由配置:https://www.vagrantup.com/docs/networking/public_network
可以進行橋接,網路卡配置等。解決虛擬機器的網路配置問題。 - 檔案複製到虛擬機器內:https://www.vagrantup.com/docs/provisioning/file
可以在建立虛擬機器的時候,從宿主機拉取各種資源到虛擬機器內部。(比如各種軟體包,配置檔案) 自定義初始化(provision):https://www.vagrantup.com/docs/provisioning
這裡就是重中之重,實現高度定製的初始化。Ansible、Chef、Puppet等就是在這裡加入。(預設是使用shell命令進行初始化)provision不是在每次啟動都會執行,只有在第一次up,以及每次privision時才會執行。
4、基於Vagrant簡易安裝MySQL
本文采取rpm方式安裝MySQL。你可以在官網 獲取到指定版本的MySQL repo下載連結。
對於rpm包的引入方式,有如下2種:
- 下載rpm包到本地,檔案複製到虛擬機器內,可參考:https://www.vagrantup.com/docs/provisioning/file
- 或者直接在虛擬機器內通過curl獲取。
Vagrantfile例項
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "test02"
#橋接網路卡配置
config.vm.network "public_network", bridge: "Realtek PCIe GbE Family Controller"
#手動配置閘道器(其實也可使用ansible完成這一步)
#config.vm.provision "shell",
# run: "always",
# inline: "route add default gw 192.168.50.1"
#定義一個指令碼(安裝基礎網路工具,yum安裝mysql)
$script = <<-'SCRIPT'
curl -o mysql.rpm https://repo.mysql.com/mysql57-community-release-el7-3.noarch.rpm
sudo rpm -ivh mysql.rpm #下載並匯入rpm包
sudo yum makecache #生成meta快取
sudo yum install -y mysql-community-{client,libs,common,server}.x86_64 #安裝Mysql
sudo yum install -y net-tools #安裝基礎網路工具
SCRIPT
# 執行上面定義好的指令碼(使用Ansible更佳)
config.vm.provision "shell", inline: $script
end
最終配置完成後,就可以vagrant up一鍵安裝Mysql虛擬機器了。也可destroy+up快速重建。
5、小結
本文主要講解了vagrant的基礎使用方法,包括安裝,box映象下載,配置檔案修改,基礎命令等。熟悉了這些,就可以快速高效的維護自己的開發測試環境。也可以通過共享基礎映象+分享Vagrantfile的方式,來將自己的映象分享給其他人。
最後還簡單實現了一個簡單的MySQL的Vagranfile,初始化使用了最直接的shell。如果能使用Ansible或者其他自動化工具,相信vagrant會更加好用。