前面介绍过我们执行初始化命令 vagrant init 本地box名称 会在当前目录生成 Vagrantfile 文件,一般是给别人共享自己的环境时都是提供一个 Vagrantfile 和一个 box 文件,这样就可以很轻松地将环境共享给别人,别人能得到一样的环境,这就是使用 Vagrant 的好处。
Vagrantfile
主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant 的一些基础配置。Vagrant 是使用 Ruby 开发的,所以它的配置语法也是 Ruby,具体可以查阅官方文档。
1、设置box名称
config.vm.box = "base"
这配置了 Vagrant 要去启用那个box作为系统,也就是前面我们输入 vagrant init 本地box 名称时所指定的box名称,如果沒有输入box名称,那么默认就是 base。
2、虚拟机(VM)配置
当我们执行初始化命令之后,会在虚拟机中生产一个系统,细心的会发现,默认的系统名称无法辨认,我使用的VirtualBox,如图:
VirtualBox提供了VBoxManage这个命令行工具,可以让我们设置虚拟机,用modifyvm
这个命令让我们可以设定虚拟机的名等等,这里我们设置在VirtualBox中显示的名称,我们可以在Vagrantfile中进行如下配置,举例如下:
调用VBoxManage的modifyvm的命令,设置虚拟机的名称为centos7-vagrant。你可以类似的通过配置其它虚拟机属性来定制你自己的虚拟机。
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--name", "centos7-vagrant"]
end
在默认生产的Vagrantfile中添加如上配置,执行vagrant reload命令,查看virtualBox中的虚拟机名称,是否发生变化。
3、网络配置
在默认情况下,对于Virtualbox而言,Vagrant将使用Virtualbox的NAT网络方式,这种方式允许虚拟机访问外部网络,但是不允许外界访问虚拟机,就连Host机器也访问不了。另外,我们可以为虚拟机配置private_network和public_network。在配置private_network时,相当于虚拟机和Host机共同组成了一个单独的局域网,外界无法访问该局域网,但是虚拟机可以访问外界,Host机和虚拟机之间也可以互访。请注意,这里说的外界是指原本和Host处于同一局域网的其他机器。
使用private_network时,我们可以给虚拟机指定固定的私有IP:
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip: "192.168.0.4"
end
也可以使用DHCP的方式动态分配IP:
Vagrant.configure("2") do |config|
config.vm.network "private_network", type: "dhcp"
end
对于Virtualbox而言,此时虚拟机其实有两张网卡在工作,一种是Vagrant默认创建的NAT网卡,另一种是Host_only类型的网卡提供private_network。
4、共享目录
虚拟机/vagrant目录默认就是当前的开发目录,这是在虚拟机开启的时候默认挂载同步的。我们还可以通过配置来设置额外的同步目录:
# 第一个参数是主机的目录,第二个参数是虚拟机挂载的目录
config.vm.synced_folder "D:/vagrant/data", "/vagrant_data"
5、端口转发
将宿主机器上8081端口的访问请求转发到虚拟机的80端口的服务上:
config.vm.network :forwarded_port, guest: 80, host: 8081
6、配置hostname
config.vm.hostname = "node1"