Vagrant 簡介和基礎使用

Vagrant 實際上一套虛擬機管理工具,基於 Ruby 開發,底層支持 VirtualBox、VMware 甚至 AWS、Docker 等做爲虛擬化系統。咱們能夠經過 Vagrant 封裝一個 Linux 的開發環境,分發給團隊成員。成員能夠在本身喜歡的桌面系統(Mac/Windows/Linux)上開發程序,代碼卻能統一在封裝好的環境裏運行,「代碼在我機子上運行沒有問題」這種說法將成爲歷史。linux

Vagrant 自己並無能力建立虛擬機,它是調用一些虛擬化工具來建立,如 VirtualBox, VMWare,甚至 AWS。ios

box

  1. 可被Vagrant直接使用的虛擬機鏡像文件
  2. 基於不一樣虛擬化技術打包的box是不同的

    clipboard.png

  3. http://www.vagrantbox.es

安裝

vagrant 支持在線安裝,可是鑑於 GFW 的緣由,國內用戶使用的時候最好先在 http://www.vagrantbox.es 下載好要使用的 box在本地安裝nginx

# vagrant box 放在 ~/precise64.box

$ mkdir vagrant && cd vagrant
$ vagrant box add base ~/precise64.box
$ vagrant init (boxname)

basebox的名稱,能夠是任意的字符串,base 是默認名稱,主要用來標識一下你添加的 box,後面的命令都是基於這個標識來操做的。docker

配置

$ vim Vagrnatfile

網絡模式

  • 端口映射shell

    config.vm.network 「forwarded_port", guest: 80, host: 8080
    guest: 80 表示虛擬機中的80端口, host: 8080 表示映射到宿主機的8080端口
  • __私有網絡__(等效於設置virtualbox使用host-only模式網絡適配器),本身自由的訪問虛擬機,可是別人不須要訪問虛擬機apache

    config.vm.network 「private_network", ip: "192.168.33.10"
    192.168.33.10 表示虛擬機的IP,多臺虛擬機的話須要互相訪問的話,設置在相同網段便可
  • __公有網絡__(等效於設置virtualbox使用bridged模式網絡適配器),若是須要將虛擬機做爲當前局域網中的一臺計算機,由局域網進行DHCPvim

    config.vm.network 「public_network"

目錄映射

將本地的目錄映射到虛擬機的對應目錄,能夠同時映射多個目錄windows

config.vm.synced_folder "/Users/wangkun/www", "/vagrant_data"

前邊的參數是本地目錄,後邊是映射目錄緩存

系統會自動映射宿主機當前目錄到虛擬機根目錄的 /vagrant安全

在該虛擬機上進行 rm -rf操做的時候請謹慎一些,由於在虛擬機中最少也會掛載/vagrant目錄,該目錄是與你主機的項目共享的,刪除的話會將項目刪除掉。

啓動腳本(非必須)

若是有須要在啓動時運行一些腳本,能夠編輯腳本,相似以下(摘自 Vagrant Document):

#!/usr/bin/env bash
$ apt-get update
$ apt-get install -y apache2
$ rm -rf /var/www
$ ln -fs /vagrant /var/www

保存在和Vagrantfile相同目錄,文件名自取(如 boot.sh),而後在Vagrantfile中添加:

config.vm.provision :shell, :path => "boot.sh"

其餘設置

設定VM的名稱和內存大小等等

config.vm.provider "virtualbox" do |vb|
  vb.customize ["modifyvm", :id,
                "--name", "dev",
                "--cpus", "1",
                "--memory", "512"]
end

這行設置的意思是調用VBoxManagemodifyvm的命令,設置VM的名稱爲devcpu爲1個核心,內存爲512MB。你能夠相似的經過定製其它VM屬性來定製你本身的VM

啓動並使用

$ vagrant up
$ vagrant ssh

os xlinux 下能夠直接使用這個命令登陸,windows下須要第三方軟件支持,win10正式版PowerShell也將支持 SSH

經常使用命令

# 啓動虛擬機
$ vagrant up

# 關閉虛擬機——對應就是關機
$ vagrant halt 

# 從新加載配置文件並啓動,不會執行啓動腳本
$ vagrant reload

# 從新加載配置文件並啓動,強制執行啓動腳本
$ vagrant reload --provision

# 暫停虛擬機——只是暫停,虛擬機內存等信息將以狀態文件的方式保存在本地,能夠執行恢復操做後繼續使用
$ vagrant suspend

# 恢復虛擬機 —— 與前面的暫停相對應
$ vagrant resume

# 刪除虛擬機,刪除後在當前虛擬機所作進行的除 Vagrantfile 中的配置都不會保留
$ vagrant destroy

# 能夠看到虛擬機的狀態,這個狀態是被緩存起來的,可能不必定準確
$ vagrant global-status

# 刷新狀態
$ vagrant global-status --prune

# 顯示box列表
$ vagrant box list

打包

$ vagrant package --output NAME --vagrantfile FILE

可選參數:

--output NAME : (可選)設置經過 NAME 來指定輸出的文件名

--vagrantfile FILE:(可選)能夠將 Vagrantfile 直接封進 box 中

注:若是網絡模式中使用 private_network 的話,在打包以前須要清除一下private_network的設置,避免沒必要要的錯誤:

sudo rm -f /etc/udev/rule.d/70-persistent-net.rules

製做完成以後直接將box文件拿到其餘計算機上配置便可使用。

多個VM的配置和啓動

vagrant支持在一個Vagrantfile中配置多個VM

單個 Vagrantfile

  • 各個VM的配置和啓動都相對獨立,如vagrant ssh時可不指定VM名。
  • Vagrantfile也不至於經常要改

多個 Vagrantfile

  • 一個Vagrantfile收錄了整個大環境中全部VM的基本配置,一眼就知道環境裏共有哪些VM,也不須要切換目錄來檢查各VM的狀態,跟不會搞混了目錄「丟掉」哪一個倒黴的VM
  • 更多地使用Chef/Puppet來配置各VM,好比把VMip配置從Vagrantfile後推到puppet進行,保持Vagrantfile的簡潔。目的是在對本地環境的VM配置,甚至生產環境的節點配置上,保持較高的一致性,有利於統一部署方式。

注意事項

  1. vagrant啓動報錯的時候嘗試用VirtualBox啓動,可能會直接彈出VT-x is disabled in the BIOS. (VERR_VMX_MSR_VMXON_DISABLED)這個錯誤,這是由於沒有開啓宿主機的虛擬化,重啓宿主機進入bios,開啓virtualiation選項便可
  2. HTTP服務器靜態資源緩存問題,這個我沒遇到

    //nginx
     sendfile off;
    
     //apache
     EnableSendfile off
  3. Vagrant 默認啓動超時時間是300S,若是啓動超時能夠配置

    config.vm.boot_timeout = 1000

Vagrant 和 Docker 的區別

Vagrant

  • Vagrant 用來構建並運行基於 lxc(內核虛擬化技術) 的虛擬 Linux 容器
  • 易於配置、可量產、而且可移植的工做環境,而且由一個統一的工做流程進行控制
  • 在硬件級別分配資源,支持部署 Linux,Unix,Windows
  • 啓動較 Docker 稍慢一些
  • 有點笨重,可是仍然比完整的虛擬機來得好,其餘有點:同時支持和一些配置工具(如 Puppet,Chef)集成

Docker

  • Docker 基於 Linux 虛擬機的虛擬環境(Virtual Environment)工具。
  • 在軟件級別分配資源,支持部署 Linux,Unix,Windows
  • 啓動只需幾秒鐘,所建立的虛擬機的隔離級別和安全性:部分
  • 輕量級,其餘有點:快速,易於學習
  • Vagrant 如今也具備一個 Docker 提供商,所以您能夠用 Vagrant 來管理 Docker 的構建和部署

做者怎麼說?

相關文章
相關標籤/搜索