概述
Vagrant 是一个可创建轻量级、高复用性和便于移植的开发环境的工具。
安装
__Note:__确保可执行文件在系统环境变量PATH中。
部署环境
初始化
首先在本地创建好工作目录,并在命令行下切换到对应目录。 执行初始化命令生成对应的Vagrantfile:
$vagrant init centos7 ./../boxes/centos7.box
centos7
为该虚拟机的名称,./../boxes/centos7.box
为该虚拟机的box路径。
该路径可以是本地路径,也可以是网络路径。
可以在官方box列表找到更多配置好的box环境。
之后可以通过文本编辑器打开Vagrantfile进行一些常用配置。
网络配置
Vagrant的网络有三种模式:
端口映射
将虚拟机中的端口映射到宿主机对应的端口直接使用。在Vagrantfile中配置:
config.vm.network "forwarded_port", guest: 80, host: 8080
guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。 端口映射配置可以存在多条。
可选参数如下:
-
guest (int) - 需要被映射到宿主机的虚拟机的任一端口。
-
guest_ip (string) - 绑定端口的虚拟机IP。默认为空,端口将连接至每一个接口程序。
-
host (int) - 用来绑定虚拟机端口的宿主机端口。推荐使用大于1024的端口。
-
host_ip (string) - 用来绑定端口的宿主机IP。默认为空,端口将被绑定至每一IP。
-
protocol (string) - “udp”或”tcp”. 指定允许在端口之间传递的协议,默认为”tcp”。
-
auto_correct (boolean) - 是否自动检测并更正端口碰撞事故。
私有网络
如果只需要自己自由的访问虚拟机,而别人不需要访问虚拟机,可以使用private_network模式。 可以为虚拟机设置IP。在Vagrantfile中配置:
config.vm.network "private_network", ip: "192.168.33.10"
192.168.33.10 表示虚拟机的IP。多台虚拟机的话需要互相访问的话,设置在相同网段即可。 也可以使用DHCP的方式为虚拟机获取IP:
config.vm.network "private_network", type: "dhcp"
可选参数auto_config (boolean)表示Vagrant是否自动配置网络接口。
公共网络
如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP, 那么在Vagrantfile中配置:
config.vm.network :public_network
也可以手动设置桥接接口的IP地址:
config.vm.network "public_network", ip: "192.168.0.17"
若宿主机存在多个可用的网络接口,则需要指定一个默认使用:
config.vm.network "public_network", bridge: 'en1: Wi-Fi (AirPort)'
目录映射
默认情况下,当前的工作目录,会被映射到虚拟机的/vagrant
目录,当前目录下的文件可以直
接在/vagrant
下进行访问。这使得我们可以在宿主机上编辑代码,利用虚拟机的资源编译和运
行工程。当然也可以在Vagrantfile中配置:
config.vm.synced_folder "src/", "/srv/website"
第一个参数为宿主机的目录,可以是绝对路径或当前工作目录的相对路径;第二个参数是映射到 虚拟机中的目录,必须为绝对路径,不存在的目录将被自动创建。
可选参数如下:
-
create
(boolean) - 宿主机路径是否自动创建,默认false。 -
disabled
(boolean) - 是否使该条配置失效。 -
group
(string) - 映射目录的所属群组,默认为SSH用户。 -
mount_options
(array) - 额外的挂载选项列表。 -
owner
(string) - 映射目录的所属用户,默认为SSH用户。 -
type
(string) - 映射目录的文件系统类型。若不指定,Vagrant会根据环境自动选择。
Note: 当宿主机和虚拟机中的GuestAdditions版本不同时,可能出现目录不能挂载的问题。 宿主机可查看virtualbox版本。 Linux系统可以通过/usr/lib/VBoxGuestAdditions查看GuestAdditions版本。
启动环境
$ vagrant up
执行上述命令,我们就可以启动虚拟环境了。但是Vagrant为使用UI,我们无法直观的看到运行状态下 的虚拟机。我们可以打开virtualbox查看或用SSH连接至虚拟机查看:
$ vagrant ssh
在 Windows 下,不能使用vagrant ssh来直接访问 vagrnat,不过该命令会告诉我们如何通过 ssh 连接 vagrant:
D:\MyVirtualMachines\CentOS7>vagrant ssh
`ssh` executable not found in any directories in the %PATH% variable. Is an
SSH client installed? Try installing Cygwin, MinGW or Git, all of which
contain an SSH client. Or use your favorite SSH client with the following
authentication information shown below:
Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: C:/Users/Shin/.vagrant.d/insecure_private_key
_**Note: **_用户vagrant和root的密码都是vagrant。
常用命令
Vagrant的命令很多.官网上有完整的列表, 这里介绍一些:
-
vagrant up
运行基于 Vagrantfile配置文件的vagrant,用来启动开发环境。
-
vagrant suspend
暂停当前环境操作。最好在关机前做好这一步,以防下次开机配置无法恢复。
-
vagrant resume
恢复虚拟机,与前面的暂停相对应。
-
vagrant halt
关机。优先调用虚拟系统的关机命令,如果加了
--force
或-f
-
vagrant destroy
永久性的移除你的虚拟环境。
-
vagrant reload
重启,一般用于重载配置文件。如果加了
--provision
, 就会恢复资料库。这在使用Cookbooks 或Puppet移除或添加东西时很有效果。 -
vagrant ssh
所有公共文件夹中的操作都会同步到虚拟环境,但如果需要直接操作可使用该命令。
-
vagrant ssh-config
显示连接到虚拟环境的所有配置项信息。
-
vagrant package --output NAME --vagrantfile FILE
将当前正在运行的环境打包成box文件。参数output(可选)制定输出文件名,参数 vagrantfile(可选)可以将指定的vagrantfile配置文件一起打包。