Vagrant是一個基於Ruby的工具,用於創建和部署虛擬化開發環境。這篇文章主要是講解vagrant的使用。本文參考自vagrant官方文檔
vagrant官網 : http://www.vagrantup.com
配置vagrant項目的第一步是創建一個VagrantFile.
在你的命令行中創建一個項目目錄,並且使用: vagrant init
初始化一個VagrantFile.
$ mkdir vagrant_dir
$ cd vagrant_dir
$ vagrant init
這個操作會在vagrant項目目錄下創建一個VagrantFile文件
vagrant使用一個基礎的鏡像來快速克隆一個虛擬機。這些基礎鏡像在vagrant中叫做 boxes。在創建好一個VagrantFile後需要規定在當前Vagrant環境中使用的box. boxes的添加可以通過 vagrant box add
命令來實現
$ vagrant box add hashicorp/precise64
這個操作會自動從網絡中下載一個名為hashicorp/precise64的box並添加到當前的vagrant環境中。這兒最好還是先從網絡上下載下來相應的box,然後在本地對box進行添加。(自動下載的速度慢)
這兒其實可以看到boxes是由類似於 username/boxName
的方式命名的
在這個網站可以找到很多boxes : https://atlas.hashicorp.com/boxes/search
在本地添加box的方法:(vagrant box add <name> <url>)
把box文件(例如文件名為: precise64.box)下載後放到當前vagrant項目目錄下,然後添加一個名為dev的box到環境中
$vagrant box add dev precise64.box
顯示類似如下信息表示添加成功:
Successfully added box 'dev' (v0) for 'virtualbox'!
在命令行中鍵入
$ vagrant up
即可以啟動當前vagrant環境,這樣就可以運行box的虛擬機環境。然後可以使用命令
$ vagrant ssh
來使用ssh登錄到vagrant的box虛擬機環境中進行操作,(一般是 127.0.0.1 : 2222 用戶名密碼都是vagrant)。
注:這兒使用命令vagrant ssh 是啟用默認的ssh客戶端,如果沒有,可以自己選擇一個ssh客戶端進行登錄。我使用的是putty
默認情況下,vagrant會共享你當前的vagrant項目目錄到你客戶機的 /vagrant 文件夾下。我們可以用ssh登錄到客戶機進行查看
$ vagrant up
...
$vagrant ssh
...
vagrant@precise64~$ ls /vagrant
VagrantFile
很簡單的實現了虛擬機與主機之間的文件夾同步
在VagrantFile文件中我們可以查找到這一行
#config.vm.synced_folder
我們可以配置這個參數改變虛擬機和主機同步的文件夾( 先去掉前面的 # 號, 第一個參數使主機的目錄,第二個參數是虛擬機的目錄)
例如:
config.vm.synced_folder “d:\” “/vagrant_data”
創建好一個虛擬機環境後,我們可以通過ssh進入虛擬機安裝webserver。但vagrant提供了一種自動配置的功能,會在你使用 vagrant up
的時候自動安裝。
我們拿安裝apache為例
在VagrantFile所在文件夾下創建一個 bootstrap.sh 文件,內容如下:
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi
然後打開VagrantFile文件進行配置config.vm.provision
config.vm.provision :shell, path: “bootstrap.sh”
最後通過 vagrant up
啟動。如果已經啟動,則可以使用 vagrant reload --provision
重新啟動並安裝好apache
登錄ssh,通過 下面命令可以查看效果
$ vagrant ssh
...
vagrant@precise64:~$ wget -qO- 127.0.0.1
這個功能的用法就看大家的創造力了
注: 這兒的腳本只是在第一次使用 vagrant up的時候生效
vagrant的網絡配置有3種方式, 這3中網絡模式實際上在VagrantFile文件中都有詳細的注釋說明的,我這兒也簡單說一下。
端口轉發允許你指定一個客戶機的端口分享到主機的一個端口,這允許你在自己的主機上訪問一個端口,但所有的網絡流量都是轉發到特定的客戶機端口上
打開VagrantFile文件,添加如下配置項
config.vm.network :forwarded_port, guest: 80, host: 4567
再通過vagrant up
啟動或者是vagrant reload
重啟。然後在你自己的浏覽器中載入 http://127.0.0.1:4567 ,你將看到vagrant虛擬機中的apache服務器提供的頁面
這個模式將使得客戶機提供一個IP 地址,主機可以通過這個IP訪問客戶機網絡,配置VagrantFile文件中的如下內容:
config.vm.network “private_network”, ip: “192.168.33.10”
config.vm.network “public_network”
Vagrant共享使得你可以通過因特網連接共享你的vagrant環境給世界上任何人。
在此之前需要現在 https://atlas.hashicorp.com 注冊一個賬號,然後通過 vagrant login
命令登錄賬號,然後就可以使用 vagrant share
就可以共享環境了。這兒我們先不做重點討論
通過 vagrant suspend
將會保存當前客戶機的狀態並且停止運行。當再次使用 vagrant up
的時候客戶機又將恢復之前停止時的狀態繼續運行
vagrant halt
將會關閉客戶機系統並且斷開客戶機的電源。vagrant up
又將啟動
vagrant destroy
將會從你的系統中移除客戶機的所有使用痕跡,停止客戶機,斷開電源,並且清空客戶機的磁盤。 同樣通過 vagrant up
啟動
除了我們使用的VirtualBox,Vagrant與很多後端支持平台協同工作,例如: VMware 和AWS 等
在這些平台上使用時,當平台安裝完成,只需要在vagrant環境啟動的時候采用合適的參數表明其使用的平台便可以。
例如:
在vmware上:
$vagrant up –provider=vmware_fusion
在AWS上
$ vagrant up –provider=aws
好了,今天寫得也很多了,常規的vagrant的使用都講了,其實很多工具都是這樣,按照80/20定律,核心的就那麼20% 。這20%掌握了其實就可以基本的使用了,本文的意義便在於此,讓大家對vagrant的使用有個基礎的了解。
如何使用vagrant在虛擬機安裝Hadoop集群 http://www.linuxidc.com/Linux/2013-04/82750.htm
Vagrant 中高效的 Puppet 模塊管理 http://www.linuxidc.com/Linux/2014-05/101873.htm
利用Vagrant搭建多平台環境 http://www.linuxidc.com/Linux/2015-09/123518.htm
使用 Vagrant 和 Fabric 用於集成測試 http://www.linuxidc.com/Linux/2014-07/104113.htm
使用 Vagrant 搭建開發環境 http://www.linuxidc.com/Linux/2014-07/104116.htm
Windows 下配置 Vagrant 環境 http://www.linuxidc.com/Linux/2014-07/104115.htm
使用 Vagrant 搭建開發環境 http://www.linuxidc.com/Linux/2014-07/104116.htm
通過 Vagrant 搭建虛擬機環境 http://www.linuxidc.com/Linux/2015-08/121985.htm
使用Vagrant和Virtualbox創建虛擬機 http://www.linuxidc.com/Linux/2016-08/134435.htm
Ubuntu下使用Vagrant搭建虛擬開發環境 http://www.linuxidc.com/Linux/2016-12/138113.htm