Vagrant 基本操作

vagrant init

Vagrantfile 是控制 Vagrant 的重要手段,也決定了 Vagrant 能做什麼、不能做什麼。完整的 Vagrantfile 設定內容,請見官方文件。透過Vagrant 自動幫你生出一份預設的Vagrant版本。

$>vagrant init ubuntu/trusty64

vagrant init ubuntu/xenial64
vagrant init --minimal ubuntu/xenial64. // 最小安裝

// 生出 centos 7
$>vagrant init centos/7

啟動(開機)定義好的虛擬機

$>vagrant up

// 查看虛擬機狀態
$>vagrant status

更新虛擬機

$>vagrant box update

登入虛擬機

vagrant ssh

Vagrant box

Vagrant 將下載回來的 box 檔案本體,儲存成互通性較高的 VMDK 格式,而不是 VirtualBox 原生的 VDI 格式。
* Vagrant 發明人創辦的 HashiCorp 公司,經營一個 Vagrant Cloud 服務,作為 Vagrant 虛擬機(在 Vagrant 術語裡稱為 box)的 repository 中央儲存庫。你可以去搜尋屬意的 box 來安裝

// 查看目前有哪些Box
$>vagrant box list
  • 若沒有改變 VAGRANT_HOME 環境變數,box 檔案本體預設目錄會是:
    • 若 host OS 是 Linux & Mac,會擺在 $HOME/.vagrant.d 目錄
    • 若 host OS 是 Windows,會擺在 %USERPROFILE%.vagrant.d 目錄

關機、移除

// 關機(虛擬機只是「關機」而已,並未被「移除」)
$>vagrant halt

// 進一步把它移除(只是從「VirtualBox 虛擬機清單」上除名,但並沒有從「Vagrant 所管理維護的『已下載 box 清單』」上除名)
$>vagrant destroy

除非你強制驅離 $HOME/.vagrant.d 裡面的庫存資料,否則下載下來的Box不會實際被移除。

// 將host OS 恢復到尚未下載啟動 guest OS 虛擬機的乾淨狀態
// Linux or Mac
$>cd demo-1
$>vagrant halt ; vagrant destroy --force
$>rm -rf .vagrant Vagrantfile

$>vagrant box remove ubuntu/trusty64
$>rm -rf $HOME/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64

與外界溝通

用 vagrant up 啟動虛擬機的同時,Vagrant 已經幫我們建好兩條互通管道,一個是透過 TCP/UDP 通訊埠轉接 (port forwarding),另一個是透過共享目錄 (shared folder)。畫面也告訴我們,當我們登入 guest OS 時,身份會是一個名為 “vagrant” 的帳號,登入至 127.0.0.1:2222。

Port forwarding

Vagrant 之所以能做到 port forwarding 這一點,也是仰賴底層的 VirtualBox;因此,這件事也可以在 VirtualBox 裡檢視。請點選該虛擬機的【設定值】→【網路】→【連接埠轉送】

如果你想再新增其他的 port forwarding 規則,請在 Vagrantfile 裡,找到以下這一行:

config.vm.network "forwarded_port", guest: 80, host: 8080

共享目錄

vagrant up 所建立的第二條互通管道 shared folder(共享目錄),Vagrant 之所以能做到「共享目錄」這一點,也是仰賴底層的 VirtualBox。
再新增其他的共享目錄,請在 Vagrantfile 裡,新增以下這一行:

config.vm.synced_folder "../data", "/vagrant_data"