Vagrantfile裏定義的路徑,都是以Vagrantfile文件所在目錄,爲工做區。html
do … end
爲配置的開始結束符,全部配置信息都寫在這兩段代碼之間。node
|…|
是do以前的對象的名稱,至關於函數的入參git
對象 do | 對象名 |
...
end
複製代碼
Vagrant.configure("2") do |config|
# ...
end
複製代碼
配置Vagrant 2.0.x 版本(Vagrant::Config.run do |config|
此爲Vagrant 1.0.x 的配置)github
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
VirtualBoxshell
VMwarecentos
Docker緩存
Hyper-Vruby
以VirtualBox爲列:
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
複製代碼
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
複製代碼
默認爲8M,若是啓動桌面,至少須要10M,以下修改成16M:
vb.customize ["modifyvm", :id, "--vram", "16"]
複製代碼
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的網絡類型有三種:
Vagrant.configure("2") do |config|
# 主機模式(Host-only)
config.vm.network "private_network", ip: "192.168.10.11"
end
複製代碼
Vagrant.configure("2") do |config|
# 橋接模式(Bridge)
config.vm.network "public_network", ip: "192.168.10.11"
end
複製代碼
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
Vagrant.configure("2") do |config|
config.vm.synced_folder "../data", "/vagrant_data"
end
複製代碼
將宿主機的Vagrantfile
所在(工做)目錄../data映射爲 VM中的 /vagrant_data
Vagrant.configure("2") do |config|
config.vm.synced_folder "../data", "/vagrant_data", owner: "root", group: "root"
end
複製代碼
設置共享目錄的全部者。默認狀況下,是SSH用戶。
不一樣的執行器,有着各自不一樣的設置
以Shell爲列:
Vagrant.configure("2") do |config|
# 執行一條shell命令,打印Hello World!
config.vm.provision "shell", inline: "echo Hello World!"
end
複製代碼
Vagrant.configure("2") do |config|
config.vm.provision "shell", path => "script.sh"
end
複製代碼
path能夠是(~、../、./)相對路徑,也能夠是絕對路徑,或者是遠程URL
$script = <<-SCRIPT echo 'Hello World!' SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline => $script
end
複製代碼
Vagrant.configure("2") do |config|
config.vm.provision "shell" do |s|
s.inline = "echo $1"
s.args = ["hello, world!"]
end
end
複製代碼
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
複製代碼
在一個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 配置文件進行修改:
EnableSendfile off
複製代碼
sendfile off;
複製代碼
修改Vagrantfile屬性, 需從新加載配置才能生效。
vagrant reload
複製代碼
定製box: github.com/jayknoxqu/p…