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…

相关文章
相关标签/搜索