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…