Vagrant:更好的個人開發環境

霍思通發表於2020-08-06

簡介

一般來說,線上環境和預釋出環境都有充足的配置化,既可以清楚的確認環境的組成細節,又可以高效快速從0重建。但是個人的開發測試環境,可能就沒有這麼完美。也許是公司公用的幾臺測試機,也許是自己的本地環境。折騰出了問題,還是比較麻煩的。我個人認為,Docker做開發環境,也是差強人意,還是本地環境或是虛擬機器比較適合。
顯然、一個良好,可快速重新構建的開發環境,可以極大的提高自己的效率。(開發環境折騰壞了,是常有的事。如果能快速重建就很好了。)如果還能將你的環境,輕鬆分享給其他人。也可以解決“我那裡還能跑,為什麼到你這裡就跑不了”的經典問題。
Vagrant就是這樣一種工具,可以控制其他虛擬化工具比如VirtualBoxVMware,並且能配置檔案從0重建環境。而且也能和AnsibleChefPuppet等自動化工具聯動。(如果其他環境使用上述自動化工具構建,那麼Vagrant可以輕鬆重用。
最後,本文選用Win10 + Virtualbox + Vagrant 作為基礎,在CentOS系統中使用rpm方式簡易安裝MySQL。

1、下載安裝

Vagrant的安裝方式和虛擬機器類似,除了軟體本身,還需要映象。Vagrant使用一種特殊的自制映象,以.box結尾。需要從官網或第三方資源處獲取。【注意,這種特殊鏡相區分虛擬機器工具,比如Virtuabox和VMware的映象不同】

  1. 軟體本體直接從官網下載即可:https://www.vagrantup.com/downloads
  2. 特殊映象有如下幾種獲取方式:

這裡沒有說明虛擬化環境本身的安裝,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,控制皮膚中可以開啟。

image

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

也可實現一個配置檔案,啟動多個虛擬機器。只要都宣告正確即可。

其中,有幾個配置項我覺得比較重要:

4、基於Vagrant簡易安裝MySQL

本文采取rpm方式安裝MySQL。你可以在官網 獲取到指定版本的MySQL repo下載連結。
對於rpm包的引入方式,有如下2種:

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會更加好用。

參考:
http://www.ttlsa.com/linux/use-vagrant-cross-platform/

相關文章