配置文件里都写了些啥?
我们先打开Vagrantfile :
Vagrant 就是使用 Ruby 写成的, 所以在这里的配置文件也需要满足 Ruby 语法。
config.vm.box = "ubuntu/trusty64"
可以看到,这两行就是我们在vagrant init中后面所指定的参数。由此可以看出,vagrant init只是帮我们生成了配置文件而已,换句话说,如果我们写好了Vagrantfile,就不需要vagrant init,只需将准备好的配置文件放入到所需目录中,然后直接执行vagrant up即可。
还有很多注释掉的配置,那些都是一些常用的配置,包括网卡设置、IP地址、绑定目录,甚至可以指定内存大小、CPU个数、是否启动界面等等。如果需要,可以根据注释文本进行配置。
下面列出一些常用的配置:
config.vm.hostname:配置虚拟机主机名
config.vm.network:这是配置虚拟机网络,由于比较复杂,我们其后单独讨论
config.vm.synced_folder:除了默认的目录绑定外,还可以手动指定绑定
config.ssh.username:默认的用户是vagrant,从官方下载的box往往使用的是这个用户名。如果是自定制的box,所使用的用户名可能会有所不同,通过这个配置设定所用的用户名。
config.vm.provision:我们可以通过这个配置在虚拟机第一次启动的时候进行一些安装配置,后面我们将专门介绍。
需要注意的是,Vagrantfile文件只会在第一次执行vagrant up时调用执行,其后如果不明确使用vagrant reload,则不会被强制重新加载。
config.vm.network"forwarded_port",guest:80,host:8080
这将让物理机的8080端口映射到虚拟机的80端口。因此,可以在物理机上直接访问虚拟机所建立的网站。这在虚拟机使用不是桥接的时候尤为重要,因为很多时候默认会禁止物理机通过网络直接访问虚拟机,通过端口映射可以依旧能够访问所需端口。
我们还可以通过config.vm.network来指定所在网络以及IP地址。一般来说,分为private_network还是public_network。
private_network: 私有网络
位于私有网络的主机之间可以互相访问,但是外界无法访问私有网络的主机,对于某些虚拟机而言,连物理机都无法通过网络直接访问虚拟机,此时如果需要使用物理机访问虚拟机,就需要前面所提及的端口映射。例如:
config.vm.network"private_network",ip:"192.168.33.10"
public_network:公有网络
在绝大多数虚拟机上,这等同于桥接网络。如果虚拟机选择了桥接方式连接,也就是相当于虚拟机和物理机在网络上处于平等的位置,同样的接在了网卡所在的网络。因此从外界看来,会感觉这是两台独立的计算机。
配置方式和私有网络接近,只需将其中的private_network换成public_network。如要使用 DHCP:
config.vm.network"public_network"
如果物理机存在多块网卡,需要指定某一块作为桥接用,那么可以参考如下配置:
config.vm.network"public_network",:bridge=>'en1: Wi-Fi (AirPort)'
如果是在启动了虚拟机之后,需要重新加载配置,只需要执行:
vagrant reload