前言
Vagrant是一款用于构建及配置虚拟开发环境的软件,基于Ruby,主要以命令行的方式运行。主要使用Oracle的开源VirtualBox虚拟化系统, 可以实行快速虚拟开发环境的构建。Vagrant 通过使用 Boxs 和 Vagrantfiel 来创建和管理完整的可移植开发环境。
1. 安装 Vagrant
我们将使用 VirtualBox 搭建虚拟开发环境。首先,请确保您的开发计算机已 安装VirtualBox 并且安装好 Extension Pack 扩展包。之后, 下载并安装适用于您的OS的Vagrant软件包。
2. 构建第一个虚拟环境
- 建立 centos7 的
Vagrantfile
配置(第3节会详细讲解Vagrantfile
)
vagrant init centos/7
- 建立虚拟机器并开启机器
vagrant up
注意:以上 vagrant up
命令还将触发 Vagrant centos/7
通过指定的URL下载该box。Vagrant仅在检测到您的系统上不存在该box时才这样做。
我们还可以使用以下命令操作您的虚拟环境
// 关闭机器
vagrant halt
// 重启机器
vagrant reload
// SSH 远端连接
vagrant ssh
// 移除虚拟机器
vagrant destroy
3. Vagrantfile 配置
因为 Vagrant 使用 "Provisioners" 和 "Providers" 作为开发环境的构建模块,而Vagrantfile是记录Providers和Provisioners的相关信息。
Providers作为服务,帮助vagrant使用Boxes建立和创建虚拟环境。Vagrant提供的内嵌的Provider有 VirtualBox、Hyper-V、Docker、VMware,而AWS以插件形式提供支持。
当使用VirtualBox等Provider,需要使用Boxes才能创建虚拟环境。当使用Docker作为Provider时,则不需要Boxes。
虚拟环境被创建后,开发者可以使用Provisioners自动化地自定义该虚拟环境。
Vagrantfiles 的语法是 Ruby,但是对 Vagrantfile 修改并不需要我们去了解 Ruby 编程语言,因为只是对它进行简单的变量分配。
3.1 vagrant 如何加载 Vagrantfile
我们要了解一个重要概念是 Vagrant 如何加载 Vagrantfile 。Vagrant 实际上会加载很多个 Vagrantfile,并合并设置。所以就有了加载顺序。
- 首先加载的是
vagrant package
打包的 box 中的 vagrantfile。 - 下一步加载 Vagrant 主目录下的 Vagrantfile (默认为
Users\~\.vagrant.d
)。 - 然后加载项目目录中的 Vagrantfile。
- 加载
config.vm.define
中的配置,您配置的多机器环境中的配置
对于大多数的设置,新的设置会覆盖旧的设置。但是,对于定义网络之类的实际上它是彼此附加的。
3.2 Vagrantfile 常用配置
config.vm.hostname
计算机名称config.vm.box
它的值是 Vagrant Cloud 中已安装的盒子的名称或盒子的简写名称 。-
config.vm.network
它提供了三个网络类型,每个网络类型都对应一个标识符,例如:"public_network"
。该命令也可以定义多个网络类型。- 公共网络 “public_network”
有种非常简单的配置,通过 DHCP 自动获取 IP
config.vm.network "public_network"
静态配置 IP
config.vm.network "public_network", ip: "192.168.0.1"
- 私有网络 "private_network"
DHCP方式
config.vm.network "private_network", type: "dhcp"
静态配置方式(注意分配使用专用IP地址空间的网络)
config.vm.network "private_network", ip: "10.0.0.0"
- 端口转发 "forwarded_port"
config.vm.network "forwarded_port", guest: 80, host: 8080
guest为虚拟机端口,host为主机端口
- 公共网络 “public_network”
config.vm.provider
Vagrant可以配置其他程序(VirtualBox等)提供的配置,以便充分使用提供程序。
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
...
end
end
常用VirtualBox设置
- 内存
vb.memory = "2048"
- cpu
vb.cpus = 2
- virtualbox显示的名称
vb.name = "api"
以下是单机环境完整的配置
Vagrant.configure("2") do |config|
config.vm.hostname="api"
config.vm.box = "centos/7"
config.vm.network "public_network"
config.vm.provider "virtualbox" do |vb|
# 内存设置
vb.memory = "2048"
# cpu
vb.cpus = 2
# virtualbox显示的名称
vb.name = "api"
end
end
-
config.vm.define
Vagrantfile可以定义和控制多台虚拟机器。通常情况下定义多机器环境,是对服务进行分离或是搭建分布式环境时候使用。
Vagrant.configure("2") do |config|
config.vm.define "api" do |api|
api.vm.box = "api"
end
config.vm.define "mysql" do |mysql|
mysql.vm.box = "mysql"
end
end
如果您在Vagrantfile中定义了多台虚拟机器,vagrant
的命令也会有些变化
-
vagrant up
会同时启动 api 和 mysql,如果您只想启动其中某台机器也可以具体的执行vagrant up api
或vagrant up mysql
。只需要后面加上具体的计算机名称。 -
vagrant ssh
具体执行vagrant ssh api
或vagrant ssh mysql