vagrant初识

Posted by Max on December 17, 2014

概述

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配置文件一起打包。