Below you will find pages that utilize the taxonomy term “Vagrant”
Posts
Vagrant - Install VirtualBox Guest Additions
OS Kernal 更新,可能會造成 Vagrant 無法正常使用,像是筆者切換了不同 Domain 的 AD帳號後,嘗試使用 Vagrant 就會出錯。
這時我們可以嘗試重新安裝 VirtualBox Guest Additions。
vagrant plugin install vagrant-vbguest 重新安裝完 Vagrant 就可以正常使用了。
read morePosts
Vagrant - Global Status
Vagrant box 一多,常常會 Vagrant up 後就忘 Vagrant halt,虛擬機就在背後持續運行。
這時我們可以呼叫 global-status 命令查詢當前使用者所有 Vagrant 虛擬機的使用狀況。
Vagrant globl-status {% img /images/posts/VagrantGlobalStatus/1.png %}
會顯示 id、name、provider、status、directory 這些資訊,藉此我們可以找到正在運行的 Vagrant box 所在目錄,切換過去將之關閉.
Link vagrant global-status - Command-Line Interface - Vagrant Documentation
read morePosts
Vagrant - File Provisioning
File Provisioning 可以讓我們自動在 Vagrant 啟動時將檔案傳遞至虛擬機中。
使用上主要是透過 Vagrantfile 將 config.vm.provision 設為 file,並利用支援的參數與方法做些對應的設定。
支援的參數有 source、 destination。source 參數指定的是本機上的來源檔案位置,destination 參數指定的是虛擬機上的目標檔案位置。
像是這邊,若要將本地的 shell script 帶入到虛擬機中。
{% img /images/posts/VagrantFileProvisioning/1.png %}
Provisioning 運行後虛擬機就會將指定的檔案帶到指定的位置。
{% img /images/posts/VagrantFileProvisioning/2.png %}
Link File Uploads - Provisioning - Vagrant Documentation
read morePosts
Vagrant - Docker Provisioning
Docker Provisioning 可以自動在 Vagrant 啟動時幫我們進行 Docker 的安裝,容器的下載,與容器的設定。
使用上主要是透過 Vagrantfile 將 config.vm.provision 設為 docker,並利用支援的參數與方法做些對應的設定。
支援的參數有 images、version。images 用以指定所要拉下來的 Docker 映像檔,跟 pull_images 方法類似。version 則是指定要裝的 docker 版本,若未指定預設是使用最新版本。
支援的方法有 build_image、pull_images、run。build_images 方法可以讓我們把 dockerfile 建立成映像檔。pull_images 方法可以將指定容器下載下來。run 方法可以啟動指定容器。
像是下面這個例子,筆者使用 boot2docker 的 vagrant box,結合 docker provision 拉下 oracle-xe-11g 容器,以守護容器方式啟動,將 1521 port 導出,並掛上 data volume。
Vagrant.configure(2) do |config| config.vm.box = "blinkreaction/boot2docker" config.vm.box_check_update = false config.vm.synced_folder "Data", "/home/docker/data", create: true config.vm.network "forwarded_port", guest: 1521, host: 1521 config.vm.provision "docker", images:["wnameless/oracle-xe-11g:latest"] do |d| d.
read morePosts
Vagrant - Shell Provisioning
要讓 Vagrant 在第一次啟動時透過 Shell Script 去做些設定,我們可以透過 Vagrant 的 Shell Provisioning。
若想在 Vagrantfile 內直接設定,可以使用 Inline 的方式撰寫。像是下面這樣設定 config.vm.provision 為 shell,並在 inline 參數這邊直接將 Script 帶在後面。
Vagrant.configure("2") do |config| ... config.vm.provision "shell", inline: "echo Hello, World" ... end 也可以先抽成方法後指給 inline 參數。
$script = <<SCRIPT echo I am provisioning... date > /etc/vagrant_provisioned_at SCRIPT Vagrant.configure("2") do |config| ... config.vm.provision "shell", inline: $script ... end 若想將 Script 獨立於 Vagrantfile 外,這邊也可以透過 path 參數指定 Script 檔。
Vagrant.configure("2") do |config| .
read morePosts
Vagrant - Vagrantfile inheritance
Vagrantfile 的設定跟很多軟體一樣是有繼承關係的。
{% img /images/posts/VagrantfileInheritance/1.png %}
首先他會去看 Vagrant Box 的 Vagrantfile。通常會是在 %HOMEPATH%\.vagrant.doxs 下,若有設定 VAGRANT_HOME 則是在 %VAGRANT_HOME%\.vagrant.doxs 下。
{% img /images/posts/VagrantfileInheritance/2.png %}
接著會看 %HOMEPATH%\.vagrant.d 或是 %VAGRANT_HOME%\.vagrant.d\ 下的 Vagrantfile。
{% img /images/posts/VagrantfileInheritance/3.png %}
最後才會看專案目錄下的 Vagrantfile。
通常我們跟著專案跑的設定會設在專案下的 Vagrantfile,若是一些通用的設定或是跟主機環境比較相關的設定,我們會在 .vagrant.d 下的 Vagrantfile 設定,像是 Proxy 的設定等。
Link Vagrantfile inheritance | Michael Maclean
read morePosts
Vagrant - Configures the virtual machine to use proxies
要讓 Vagrant 走 Proxy,我們可以借助 vagrant-proxyconf 套件。
用 vagrant plugin install 帶入套件名稱 vagrant-proxyconf 進行套件的安裝。
vagrant plugin install vagrant-proxyconf {% img /images/posts/ConfigVagrantProxy/1.png %}
套件安裝完畢後,我們可以修改 Vagrantfile 做 proxy 的設定。像是下面這樣:
... if Vagrant.has_plugin?("vagrant-proxyconf") config.proxy.http = "http://proxy.xuenn.com:3128/" config.proxy.https = "https://proxy.xuenn.com:3128/" config.proxy.no_proxy = "localhost,127.0.0.1" end ... if Vagrant.has_plugin?(“vagrant-proxyconf”) 用以判斷 vagrant-proxyconf 套件是否有安裝,config.proxy.http 用以設定 http 的 proxy,config.proxy.https 用以設定 https 的 proxy,config.proxy.no_proxy 用以設定不走 proxy 的 domain。
若是 Proxy 需經過認證,設定時要將帳密一併帶入:
... if Vagrant.has_plugin?("vagrant-proxyconf") deblock %} config.proxy.http = "http://username:password@proxy.xuenn.com:3128/" config.proxy.https = "https://username:password@proxy.
read morePosts
Vagrant - VBox Snapshot
要透過 Vagrant 去操作 Snapshot,我們可以借助 Vagrant 的 vagrant-vbox-snapshot 套件。
用 vagrant plugin install 帶入套件名稱 vagrant-vbox-snapshot 進行套件的安裝。
vagrant plugin install vagrant-vbox-snapshot 這邊若有需要可能會連帶要求安裝套件 vagrant-winnfsd。
vagrant plugin install vagrant-winnfsd {% img /images/posts/VagrantSnapshot/1.png %}
套件安裝完畢後,我們就可以視需要調用命令進行 Snapshot 的操作。
套件的使用方式如下:
Usage vagrant snapshot <command> [<args>] Sub Commands back vagrant snapshot back [vm-name] delete vagrant snapshot delete [vm-name] <SNAPSHOT_NAME> go vagrant snapshot go [vm-name] <SNAPSHOT_NAME> list vagrant snapshot list take vagrant snapshot take [vm-name] <SNAPSHOT_NAME> 使用上會像這樣:
Vagrant snapshot take “init” Vagrant snapshot list Vagrant snapshot go “init” Vagrant snapshot delete “init” 像是 vagrant snapshot take 後面接 Snapshot 的名稱下去調用即可進行 Snapshot 的建立。vagrant snapshot list 可查驗有哪些 Snapshot 可用。
read morePosts
Vagrant - Creating a new box from an existing VM
要將已經存在的 VM 匯出成 Vagrant Box,我們可以透過 Vagrant package 命令的 --base 參數。
參數使用方式官方的說明如下:
--base NAME - Instead of packaging a VirtualBox machine that Vagrant manages, this will package a VirtualBox machine that VirtualBox manages. NAME should be the name or UUID of the machine from the VirtualBox GUI. 簡單的說就是以直接在 --base 參數後帶入欲匯出的虛擬機的名稱即可。以匯出筆者電腦的 Win7 VM 為例,就是帶入 Win7,這邊另帶 --output 參數指定匯出後的 box 檔。
{% img /images/posts/CreateVagrantBoxFromExistingVM/1.png %}
輸入完我們就會看到指定的 box 產出。
我們可以將 box 加入。
{% img /images/posts/CreateVagrantBoxFromExistingVM/2.png %}
read morePosts
Vagrant - SSH in windows
要在 Windows 下使用 SSH 連進 Vagrant 作些設定,我們有幾種方式可以使用。
一種是透過 SSH 連線軟體連進 Vagrant,像是 PuTTY。
輸入 IP 與 Port 進行連線。
{% img /images/posts/VagrantSSHInWindow/1.png %}
連進去後輸入 Vagrant Box 的帳密即可,如果不知道帳密的話,通常這邊的帳密會是 vagrant,可以試試看。
{% img /images/posts/VagrantSSHInWindow/2.png %}
另外一種方式則是直接透過命令提示字元叫用 Vagrant SSH 連進 Vagrant。使用前需先安裝 Git,並將 Bin 的路徑設上,都完成後即可直接叫用Vagrant SSH 連進 Vagrant。
{% img /images/posts/VagrantSSHInWindow/3.png %}
路徑的設定可以直接在系統的環境變數中設定,叫用上會比較方便。但若有需要也可以直接在命令提示字元中加入。
set PATH=%PATH%;C:\Program Files (x86)\Gitin 此外也可以直接叫用 SSH 連進去,比較麻煩一點就是了。
{% img /images/posts/VagrantSSHInWindow/4.png %}
read more