Vagrant介紹

Vagrant

介紹

Vagrant能夠爲你提供可配置、可再生、便攜的工做環境,它主要是一箇中間層技術,它的下層是VirtualBox, VMware, AWS或者其餘provider,它的上層是provisioning工具,好比shell scripts, Chef, or Puppet等能夠自動化安裝和配置軟件的工具。 html

對你有什麼用

  • 對於開發人員來講,Vagrant能夠幫你統一團隊成員的開發環境。若是你或者你的夥伴建立了一個Vagrantfile,那麼你只須要執行vagrant up就好了,全部的軟件都會安裝而且配置好。團隊成員能夠經過相同的Vagrantfile來建立他們的開發環境,不管他們是在Linux, Mac OS X, 或者Windows下,這樣就能夠保證你團隊成員的代碼是跑在相同的環境中,從而避免使人煩躁的【在個人機器上是能夠的】問題。 shell

  • 對於運維人員來講,Vagrant能夠給你提供一次性,而且與線上一致的服務器環境,你能夠利用VirtualBox或者VMware來測試你的shell scripts, Chef cookbooks, Puppet modules等管理腳本。你不須要再苦逼的登陸到線上服務器提心吊膽的測試了,Vagrant能夠解救你。 apache

  • 對於設計人員來講,Vagrant能夠幫你處理一切,你只須要專一在設計上就行了。一旦開發人員幫你配置好了Vagrant以後,你只須要執行vagrant up,而後開始設計。 bootstrap

安裝

Vagrant的安裝很是簡單,直接下載對應操做系統的版本就能夠了。 瀏覽器

第一印象

$ vagrant init hashicorp/precise32
$ vagrant up

執行以上命令以後,你已經擁有了一個Ubuntu 12.04 LTS 32-bit系統運行在VirtualBox中。 你能夠經過vagrant ssh登陸到這個虛擬機中,若是你不須要它了,能夠經過vagrant destroy來銷燬。 bash

創建項目

創建Vagrant項目的第一步是配置Vagrantfile。執行以下命令 服務器

$ mkdir my_vagrant
$ cd my_vagrant
$ vagrant init

這會在當前目錄下生成一個Vagrantfile文件,這個文件就是一切的開始,對了,你最好把它添加到版本庫中,這樣你的小夥伴也能夠經過它來初始化開發環境了。 網絡

Box

Vagrant使用的image叫作box,若是你執行過上面的命令,那麼你已經在本地擁有了一個box。若是沒有執行,那麼你須要執行 運維

$ vagrant box add hashicorp/precise32

這會從Vagrant Cloud中下載hashicorp/precise32。 咱們接下來須要配置咱們的項目來使用這個box,編輯Vagrantfile文件並修改成: ssh

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
end

除了hashicorp/precise32,你能夠在Vagrant Cloud找到更多適合你的box。

啓動

$ vagrant up

就這麼簡單。完成以後,你就擁有了一個Ubuntu系統,你能夠經過

$ vagrant ssh

登陸它,而後隨意執行任何命令,除了rm -rf /,緣由接下來講明。

目錄同步

雖然說如此容易的啓動一個虛擬機的確很酷,但不是全部人都喜歡經過終端來編輯文件(Vim黨和Emacs黨勿噴),因此Vagrant提供了一個目錄同步的功能。默認狀況下Vagrant會把你的項目目錄(存儲Vagrantfile的那個)與虛擬機中的/vagrant進行同步(這就是爲何你不要執行rm -rf /的緣由,不然你會把項目目錄刪掉)。咱們能夠登陸到虛擬機上驗證一下。

$ vagrant up
...
$ vagrant ssh
...
vagrant@precise32:~$ ls /vagrant
Vagrantfile

若是你不確信,能夠建立一個文件看看:

vagrant@precise32:~$ touch /vagrant/foo
vagrant@precise32:~$ exit
$ ls
foo Vagrantfile

怎麼樣?沒騙你吧。經過目錄同步功能,你還能夠繼續使用最愛的編輯器來修改虛擬機中的文件。

配置

假設咱們的業務須要安裝Apache,傳統的作法是在虛擬機上手動安裝並配置,若是這樣那麼使用Vagrant的人都須要重複一遍。幸虧Vagrant提供了自動配置(automated provisioning)的功能。經過這個特性,Vagrant會在你執行vagrant up的時候自動安裝所需的軟件。

在你的項目目錄(即包含Vagrantfile的目錄)下建立Bash腳本bootstrap.sh,內容以下:

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

接下來,咱們來配置讓Vagrant在啓動虛擬機的時候自動執行以上腳本,在Vagrantfile中添加以下內容:

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
end

provision這一行告訴Vagrant使用shell provisioner來配置虛擬機,要執行的腳本是bootstrap.sh。

接下來執行vagrant up來啓動虛擬機,以後你能夠登陸到虛擬機來驗證Apache時候已經安裝成功:

$ vagrant ssh
...
vagrant@precise32:~$ wget -qO- 127.0.0.1

網絡

老是在終端裏邊訪問Apache不是什麼好的主意,因此這個部分咱們會對Vagrant的網絡進行配置,讓它能夠經過宿主機器(Host machine)來訪問。

咱們用端口映射來實現對Apache服務的訪問,編輯Vagrantfile文件以下:

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, host: 4567, guest: 80
end

forwarded_port這一行把宿主機器的4567端口映射到了客戶機器(Guest machine)的80端口。而後經過vagrant reload重啓虛擬機,重啓完成以後你用瀏覽器打開 http://127.0.0.1:4567就能夠訪問到WEB頁面了。

參考

相關文章
相關標籤/搜索