Vagrantfile詳細說明

Vagrant文件說明

  • Vagrantfile裏定義的路徑,都是以Vagrantfile文件所在目錄,爲工做區。html

  • do … end 爲配置的開始結束符,全部配置信息都寫在這兩段代碼之間。node

  • |…| 是do以前的對象的名稱,至關於函數的入參git

    對象 do | 對象名 |
      ...
    end
    複製代碼

Vagrant單機部署

一、版本聲明

Vagrant.configure("2") do |config|
  # ...
end
複製代碼

配置Vagrant 2.0.x 版本(Vagrant::Config.run do |config| 此爲Vagrant 1.0.x 的配置)github

二、box名稱設置

Vagrant.configure("2") do |config|
  config.vm.box = "centos-7.2"
end
複製代碼

該名稱爲box系統鏡像名web

三、主機名稱

Vagrant.configure("2") do |config|
  config.vm.hostname = "node1" #默認localhost.localdomain
end
複製代碼

四、虛擬機屬性

不一樣的虛擬化平臺,有着各自不一樣的設置docker

以VirtualBox爲列:

4.一、基本通用設置

Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    vb.name = "centos7-vm" #虛擬機名稱(默認隨機生成一段字符串)
    vb.memory = "1024"     #虛擬機內存(單位M)
    vb.cpus = 2            #虛擬機cpu核數
    vb.gui = true          #啓動虛擬機桌面(默認false)
  end
end
複製代碼

4.二、調用VirtualBox命令

VirtualBox提供了VBoxManage命令行工具能夠針對某個 VM 作不少事,modifyvm 就是一條能夠修訂 VM 配置參數的子命令。而Vagrant也能夠在配置文件 Vagrantfile中操做 virtualbox 以達到相似的目的。

Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm",:id,"--name","centos7-vm","--memory","1024","--cpus","2"]
  end
end
複製代碼
4.2.一、其餘命令
4.2.1.一、修改顯存

默認爲8M,若是啓動桌面,至少須要10M,以下修改成16M:

vb.customize ["modifyvm", :id, "--vram", "16"]
複製代碼
4.2.1.二、增長光驅
vb.customize ["storageattach",:id,"--storagectl", "IDE Controller","--port","0","--device","0","--type","dvddrive","--medium","/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso"]
複製代碼

注: 參數meduim不能夠爲空

"--meduim", "emptydrive" ###只掛載驅動器不掛ISO , "--medium", "none" ###卸載光驅

五、網絡配置

Vagrant的網絡類型有三種:

  • NAT(網絡地址轉換模式): 默認建立,只能虛擬機單向向外訪問,其餘虛擬機和主機沒法訪問它。
  • Host-only(主機模式) : 虛擬機只能與宿主計算機互訪,其餘主機沒法訪問它,但同網段虛擬機能夠。
  • Bridge(橋接模式) : 此模式下VM就像同處一個局域網中的其餘的計算機同樣,能夠被其餘主機訪問。

5.一、Private network(私有網絡)

Vagrant.configure("2") do |config|
  # 主機模式(Host-only)
  config.vm.network "private_network", ip: "192.168.10.11"
end
複製代碼

5.二、Public network(公有網絡)

Vagrant.configure("2") do |config|
  # 橋接模式(Bridge)
  config.vm.network "public_network", ip: "192.168.10.11"
end
複製代碼

5.三、 Forwarded port(端口映射)

Vagrant.configure("2") do |config|
  config.vm.network :forwarded_port, guest: 80, host: 8080
end
複製代碼

把宿主機上的8080端口映射到虛擬機的80端口,不支持在宿主機器上使用小於1024的端口來轉發

guest和host是必須的,還有幾個可選屬性:

  • guest_ip:字符串,VM指定綁定的IP,默認值爲: 0.0.0.0

  • host_ip :字符串,HOST指定綁定的IP,默認值爲:0.0.0.0

  • protocol:字符串,可選TCP或UDP,默認值爲:TCP

六、共享目錄

6.一、Basic usage(基本用法)

Vagrant.configure("2") do |config|
  config.vm.synced_folder "../data", "/vagrant_data"
end
複製代碼

將宿主機的Vagrantfile所在(工做)目錄../data映射爲 VM中的 /vagrant_data

6.二、修改全部者/組

Vagrant.configure("2") do |config|
  config.vm.synced_folder "../data", "/vagrant_data", owner: "root", group: "root"
end
複製代碼

設置共享目錄的全部者。默認狀況下,是SSH用戶。

七、啓動任務

不一樣的執行器,有着各自不一樣的設置

以Shell爲列:

7.一、單行腳本

Vagrant.configure("2") do |config|
 # 執行一條shell命令,打印Hello World!
 config.vm.provision "shell", inline: "echo Hello World!"
end
複製代碼

7.二、外部腳本

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path => "script.sh"
end
複製代碼

path能夠是(~、../、./)相對路徑,也能夠是絕對路徑,或者是遠程URL

7.三、內聯腳本

$script = <<-SCRIPT echo 'Hello World!' SCRIPT

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline => $script
end
複製代碼

7.四、參數傳遞

Vagrant.configure("2") do |config|
  config.vm.provision "shell" do |s|
    s.inline = "echo $1"
    s.args   = ["hello, world!"]
  end
end
複製代碼

7.五、多個任務

Vagrant.configure("2") do |config|
    
  config.vm.provision "shell", inline: "echo foo"

  config.vm.define "websit" do |web|
    web.vm.provision "shell", inline: "echo websit"
  end

  config.vm.provision "shell", path => "script.sh"
    
end
複製代碼

Vagrant分佈式部署

在一個Vagrantfile文件裏創建多個虛擬機 www.vagrantup.com/docs/multi-…

一、配置語法

VAGRANTFILE_API_VERSION = "2"                                #定義版本

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|       #使用內部2版本
  
  config.vm.define :debian1 do |centos1|                     #定義虛擬機
     centos1.vm.box = "centos-7.2"                           #使用centos-7.2系統鏡像
     centos1.vm.host_name = "node1"                          #設置hostname
     centos1.vm.network :public_network, ip: "192.168.1.1"  #設置網絡
  end
  config.vm.define :debian2 do |centos2|
     centos2.vm.box = "centos-7.2"
     centos2.vm.host_name = "node2"
     centos2.vm.network :public_network, ip: "192.168.1.2"
  end
  config.vm.define :node3 do |centos3|
     centos3.vm.box = "centos-7.2"
     centos3.vm.host_name = "node3"
     centos3.vm.network :public_network, ip: "192.168.1.3"
  end

end
複製代碼

二、循環建立

(1..3).each do |i|
  config.vm.define "node-#{i}" do |node|
    node.vm.box = "centos-7.2"
    node.vm.host_name = "node#{i}"
    node.vm.network :public_network, ip: "192.168.1.#{i}"
  end
end
複製代碼

注意事項

一、程序緩存

使用 Apache/Nginx 時會出現諸如圖片修改後但頁面刷新仍然是舊文件的狀況,是因爲靜態文件緩存形成的。須要對虛擬機裏的 Apache/Nginx 配置文件進行修改:

  • Apache 配置添加:
EnableSendfile off
複製代碼
  • Nginx 配置添加:
sendfile off;
複製代碼

二、重載配置

修改Vagrantfile屬性, 需從新加載配置才能生效。

vagrant reload
複製代碼

定製box: github.com/jayknoxqu/p…

相關文章
相關標籤/搜索