Miles' Blog

天涯何處無幹話,何必要講實務話

Vagrant

Vagrant 的重點:

  • 協助安裝、設定虛擬機
  • 也可以儲存在發佈
  • 專為開發者設計,以虛擬機為主的開發環境
  • 自動化,可程式化
  • 可攜性

Start

使用 VirtualBox + Vagrant 開始。

Mac 可以用 brew 下載安裝

brew cask install vagrant      --appdir=/Application
brew cask install virtualbox   --appdir=/Application

建虛擬機,OS list

mkdir demo
cd demo
vagrant init ubuntu/trusty64  # 這道指令會去下載 box 檔
vagrant up

現在虛擬機啟動了,只要在同個目錄下,都可以 ssh 進去

vagrant ssh

關機

vagrant halt

或是從 VirtualBox 的清單中移除

vagrant destory

halt + up + take effect changed in the Vagrantfile

vagrant reload [name|id]

Force the provisioners to run

vagrant provision [vm-name] 

Vagrantfile

Vagrant 在啟動 box 之前,需要先定義好要啟動的是哪一種 box 和定義相關屬性,如

  • VM 的名稱
  • 檔案的 URL
  • 分配的記憶體
  • port 對應關係

我們可以在選定的工作目錄裡,把這些屬性寫到一個叫 Vagrantfile 的設定檔裡,它是用 Ruby 寫的。

這 box 是用哪個 repository

config.vm.box = "ubuntu/trusty64"

Port forwarding 可以建立 host port 與 guest port 間的連結,比方說 host 的 8080 要導到虛擬機的 80 :

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

Private network 其實就是 host-only,另外可以設定 IP,VM 間也是用這個 IP 在溝通

config.vm.network "private_network", ip: "192.168.33.10"

Public network 是使用 bridged network 直接接到外部網路

config.vm.network "public_network"

共享目錄,比方說工作目錄下的 www 要對應虛擬機的 /var/www/html

config.vm.synced_folder "www", "/var/www/html"

設定 VirtualBox 中顯示的名稱和記憶體大小

config.vm.customize ["modifyvm", :id, "--name", "redis", "--memory", "512"]

基本應用操作

看本機端的 Vagrant repository

vagrant box list

看目前 Vagrant 的狀態

vagrant status

當 box 內容初始化差不多了,就可以用打包指令,在未來的時候可以使用:

vagrant package --output redis.box

打包後的東西可以再匯入到 Vagrant repository 裡

vagrant box add --name new-demo redis.box

只要有 Vagrant repository 裡面有的,就可以拿來 init 出一個新的虛擬機

vagrant init new-demo

References

0%