1> 简介:
vagrant提供了易于配置,重复性好,便携式的工作环境,这些对开发人员非常有用,它可以让开发人员可以创建简单且可重复使用的基于VirtualBox的虚拟机(现在也支持VMware和AWS等),这些虚拟机可以快速的创建和销毁。vagrant也可以和puppet,chef等结合,实现虚拟机管理的自动化。vagrant的官网:http://www.vagrantup.com本文出自cclo的blog,转载时请务必以超链接形式标明文章原始出处:http://xuclv.blog.51cto.com/5503169/1239250
2> 安装:(OS:ubuntu12.04 vagrant:1.2.2)
$ sudo apt-get install virtualbox
$ sudo dpkg -i vagrant_1.2.2_x86_64.deb
版本1.0.x也可以这样安装(OS:ubuntu12.04)
sudo apt-get install vagrant
或
1:sudo apt-get install virtualbox
2:sudo apt-get install ruby1.9.1 rubygems
3:gem install vagrant
NOTE:在物理机的基础上安装virtualbox,如果用vm创建的虚拟机中再安装virtualbox和vagrant,那么vagrant将起不来。这里http://downloads.vagrantup.com/下载相应的vagrant版本,注意1.0.x版本和1.1+版本的配置有较大不同,稍后在做介绍。
3> 一个简单的项目
版本1.1+
$ vagrant init precise32 http://files.vagrantup.com/precise32.box
$ vagrant up
版本1.0.x and 1.1+
$ vagrant box add precise32 http://files.vagrantup.com/precise32.box
$ vagrant init precise32
$ vagrant up
上述命令运行后,将有一个虚拟机VirtualBox运行Ubuntu 12.04 LTS 32位的系统。使用命令$ vagrant ssh进入该系统。
NOTE:"precise32"为虚拟机的名字,可以更改为你想用的名字。
box是一个zip包,包含了vagrant的配置信息和VirtualBox的虚拟机镜像文件
"http://files.vagrantup.com/precise32.box"为镜像所在的路径,可以为本地路径,所以建议将box下载下来后,指定为本地路径,速度会更快
这里http://www.vagrantbox.es/有许多公共的base boxes可供下载和使用,后续将会介绍如何创建一个base box。
4> 常用的vagrant命令:
$ vagrant box add NAME URL #添加一个box
$ vagrant box list #查看本地已添加的box
$ vagrant box remove NAME virtualbox #删除本地已添加的box,如若是版本1.0.x,执行$ vagrant box remove NAME
$ vagrant init NAME #初始化,实质应是创建Vagrantfile文件
$ vagrant up #启动虚拟机
$ vagrant halt #关闭虚拟机
$ vagrant destroy #销毁虚拟机
$ vagrant reload #重启虚拟机
$ vagrant package #当前正在运行的VirtualBox虚拟环境打包成一个可重复使用的box
$ vagrant ssh #进入虚拟环境
5> Vagrantfile
官方解释是这样的:The primary function of the Vagrantfile is to describe the type of machine required for a project, and how to configure and provision these machines。翻译出来太生涩,简单来说就是配置这个虚拟主机网络连接方式,端口转发,同步文件夹,以及怎么和puppet,chef结合的一个配置文件。执行完$ vagrant init后,在工作目录中,你会发现此文件。
NOTE:配置版本说明:
1
2
3
|
Vagrant.configure( "2" ) do |config|
end
|
当前支持的两个版本:"1"和"2". "1":描述是Vagrant 1.0.x的配置(如看到Vagrant::Config.run do |config| 此也为Vagrant 1.0.x 的配置);"2":描述的是1.1+ leading up to 2.0.x的配置。vagrant 1.1+ 的Vagrantfiles能够与vagrant 1.0.x的Vagrantfiles保持向后兼容,也大幅引入新的功能和配置选项。
6> 配置网络(本文将提供2种版本的常用配置,其中版本1的配置经过实践验证)
(1) 端口转发:(假设虚拟机的80端口提供web服务,此处将通过访问物理机的8080端口转发到虚拟机的80端口,来实现web的访问)
版本"2":
1
2
3
|
Vagrant.configure( "2" ) do |config|
config.vm.network :forwarded_port, guest: 80, host: 8080
end
|
版本"1"
1
2
3
4
|
Vagrant::Config.run do |config|
config.vm.forward_port 80, 8080
end
|
(2)桥接网络(公共网络,局域网DHCP服务器自动分配IP)
版本"2"
1
2
3
|
Vagrant.configure( "2" ) do |config|
config.vm.network :public_network
end
|
版本"1"
1
2
3
|
Vagrant::Config.run do |config|
config.vm.network :bridged
end
|
$ VBoxManage list bridgedifs | grep ^Name #可通过此命令查看本机的网卡
Name: eth0
指定网卡,配置可写为如下:
1
2
3
|
Vagrant::Config.run do |config|
config.vm.network :bridged, :bridge => "eth0"
end
|
(3) 私有网络:允许多个虚拟机通过主机通过网络互相通信,vagrant允许用户分配一个静态IP,然后使用私有网络设置。
版本"2"
1
2
3
|
Vagrant.configure( "2" ) do |config|
config.vm.network :private_network, ip: "192.168.50.4"
end
|
版本"1"
1
2
3
|
Vagrant::Config.run do |config|
config.vm.network :hostonly, "192.168.50.4"
end
|
7> 同步文件夹
默认的,vagrant将共享你的工作目录(即Vagrantfile所在的目录)到虚拟机中的/vagrant,所以一般不需配置即可,如你需要可配置:
版本"2"
1
2
3
4
|
Vagrant.configure( "2" ) do |config|
config.vm.synced_folder "src/" , "/srv/website"
end
|
"src/":物理机目录;"/srv/website"虚拟机目录
8> vagrant和shell(实现在虚拟机启动的时候自运行需要的shell命令或脚本)
版本"2"
内嵌脚本:
1
2
3
4
|
Vagrant.configure( "2" ) do |config|
config.vm.provision :shell,
:inline => "echo Hello, World"
end
|
复杂点的调用如下:
1
2
3
4
5
6
7
|
$script = <<SCRIPT
echo I am provisioning...
date > /etc/vagrant_provisioned_at
SCRIPT
Vagrant.configure( "2" ) do |config|
config.vm.provision :shell, :inline => $script
end
|
外部脚本:
1
2
3
|
Vagrant.configure( "2" ) do |config|
config.vm.provision :shell, :path => "script.sh"
end
|
脚本可传递参数:
1
2
3
4
5
6
|
Vagrant.configure( "2" ) do |config|
config.vm.provision :shell do |s|
s.inline = "echo $1"
s.args = "'hello, world!'"
end
end
|
版本"1":
内部脚本:
1
2
3
|
Vagrant::Config.run do |config|
config.vm.provision :shell, :inline => "echo abc > /tmp/test"
end
|
外部脚本:
1
2
3
|
Vagrant::Config.run do |config|
config.vm.provision :shell, :path => "test.sh"
end
|
脚本参数:
1
2
3
4
5
6
|
Vagrant::Config.run do |config|
config.vm.provision :shell do |shell|
shell.inline = "echo $1 > /tmp/test"
shell.args = "'this is test'"
end
end
|
9> vagrant和puppet(如果不知道puppet,请看这里http://xuclv.blog.51cto.com/blog/5503169/1154261)
(1) vagrant调用puppet单独使用
1
2
3
4
5
6
7
8
|
Vagrant.configure( "2" ) do |config|
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "my_manifests"
puppet.manifest_file = "default.pp"
puppet.module_path = "modules"
puppet.options = "--verbose --debug"
end
end
|
默认配置的目录结构:
$ tree
.
|-- Vagrantfile
|-- manifests
| |-- default.pp
(2) vagrant让puppet作为代理,连接Puppet master
1
2
3
4
5
6
7
|
Vagrant.configure( "2" ) do |config|
config.vm.provision :puppet_server do |puppet|
puppet.puppet_server = "puppet.example.com"
puppet.puppet_node = "node.example.com"
puppet.options = "--verbose --debug"
end
end
|
NOTE:
版本1配置差别不大,不再详述,区别:Vagrant.configure("2") do |config|改为Vagrant::Config.run do |config|
以上Vagrantfile配置完毕后,可$ vagrant reload 重启虚拟机以来实现配置生效
官方给了一个例子(可尝试玩玩):
1.进入工作目录
2.修改Vagrantfile
$ vim Vagrantfile #启用或添加如下行:
1
2
3
4
|
Vagrant.configure( "2" ) do |config|
config.vm.provision :puppet
end
end
|
3.创建puppet的主目录
$ mkdir manifests
4.配置pp文件
$ vim manifests/default.pp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# Basic Puppet Apache manifest
class apache {
exec { 'apt-get update' :
command => '/usr/bin/apt-get update'
}
package { "apache2" :
ensure => present,
}
service { "apache2" :
ensure => running,
require => Package[ "apache2" ],
}
file { '/var/www' :
ensure => link,
target => "/vagrant" ,
notify => Service[ 'apache2' ],
force => true
}
}
include apache
|
5.重启虚拟机
$ vagrant reload #重启后可看到虚拟机中已经安装好了apache
后记:
总的来说vagrant还是一个简单好用的软件,常用于和puppet或者chef结合,实现测试环境的自动化部署,保证了测试环境的快速创建,便捷部署,一致性,同时也便于销毁。另,这里不常用chef,所以此篇文章不对其进行介绍,有兴趣的可以自行研究.
Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。
我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。
安装步骤
1. 安装 VirtualBox
虚拟机还是得依靠 VirtualBox 来搭建,免费小巧。
下载地址:https://www.virtualbox.org/wiki/Downloads
* 虽然 Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的
2. 安装 Vagrant
下载地址:http://downloads.vagrantup.com/ 根据提示一步步安装。
此外,还得下载官方封装好的基础镜像:
Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box
Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box
如果你要其他系统的镜像,可以来这里下载:http://www.vagrantbox.es/
* 鉴于国内网速,我们将下载镜像的步骤单独剥离出来了
3. 添加镜像到 Vagrant
假设我们下载的镜像存放路径是 ~/box/precise64.box
,在终端里输入:
$ vagrant box add hahaha ~/box/precise64.box
hahaha
是我们给这个 box 命的名字,~/box/precise64.box
是 box 所在路径
4. 初始化开发环境
创建一个开发目录(比如:~/dev
),你也可以使用已有的目录,切换到开发目录里,用 hahaha
镜像初始化当前目录的环境:
$ cd ~/dev
$ vagrant init hahaha
$ vagrant up
你会看到终端显示了启动过程,启动完成后,我们就可以用 SSH 登录虚拟机了,剩下的步骤就是在虚拟机里配置你要运行的各种环境和参数了。
$ vagrant ssh
$ cd /vagrant
~/dev
目录对应虚拟机中的目录是 /vagrant
Windows 用户注意:Windows 终端并不支持 ssh,所以需要安装第三方 SSH 客户端,比如:Putty、Cygwin 等。
5. 其他设置
Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile
的配置文件,可以修改配置文件进行个性化的定制。
Vagrant 默认是使用端口映射方式将虚拟机的端口映射本地从而实现类似 http://localhost:80
这种访问方式,这种方式比较麻烦,新开和修改端口的时候都得编辑相比较而言,host-only 模式显得方便多了。打开 Vagrantfile
,将下面这行的注释去掉(移除 #
)并保存:
config.vm.network :private_network, ip: "192.168.33.10"
重启虚拟机,这样我们就能用 192.168.33.10
访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。
6. 打包分发
当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:
$ vagrant package
打包完成后会在当前目录生成一个 package.box
的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。
7. 常用命令
$ vagrant init
$ vagrant up
$ vagrant halt
$ vagrant reload
$ vagrant ssh
$ vagrant status
$ vagrant destroy
更多内容请查阅官方文档 http://docs.vagrantup.com/v2/cli/index.html
8. 注意事项
使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:
EnableSendfile off
sendfile off;
SegmentFault 团队就是用这种方式统一开发环境的
本篇文章所用程序版本 VirtualBox 4.2.16,Vagrant 1.2.7
相关推荐
**Vagrant 简介** Vagrant 是由 HashiCorp 公司开发的一款开源软件,它的主要目标是让开发者能够构建一致的跨平台开发环境。通过Vagrant,你可以创建一个轻量级且可重复的虚拟机环境,这些环境基于 VirtualBox、...
1. **虚拟机管理**:Vagrant 可以与多种虚拟化技术配合使用,如 VirtualBox、VMware 和 Hyper-V,允许用户轻松地创建和配置虚拟机。在Vagrantfile配置文件中,你可以定义虚拟机的硬件配置(如内存大小、CPU数量)和...
Vagrant 使用VirtualBox、VMware或其它虚拟化平台作为后端,但它通过一个简单的命令行界面抽象了这些复杂性。开发者只需要通过简单的命令就能启动、停止、配置和同步文件到虚拟机,极大地提高了工作效率。"vagrant_...
android-vagrant, 使用 Android Studio Android SDK等的Vagrant设置 android-vagrant使用 Android SDK 。Android Studio 和调试安装最小 Linux VM的实验Vagrant安装。 设计用于 Mac,Windows 和 Linux 。先决条件...
vagrant使用笔记,记录了一些vagrant的基本命令
在Vagrant安装完成后,我们可以开始使用`vagrant box add`命令将CentOS 7虚拟机添加到本地镜像库。描述中的"添加box到本地镜像库:vagrant box add centos/7 ./vagrant-centos-7.box"指明了这个过程。`vagrant box ...
1. **版本控制**: Vagrant 使用Box模型,每个Box代表一个预配置好的基础环境,通过版本控制可以轻松回滚到特定的环境状态。 2. **跨平台兼容**: Vagrant 支持多种主机操作系统,如Windows、MacOS和Linux,并且可以...
总之,Vagrant 2.2.19 for Windows与Homestead结合使用,为Laravel开发提供了便捷且标准化的环境。通过简单的配置和管理,开发者可以快速地在本地搭建一个安全、独立的开发环境,从而更专注于代码编写,提高工作效率...
Vagrant通过自动化虚拟化技术,如VirtualBox、VMware或AWS,让开发者能够快速地创建一致且可重复使用的开发环境。这个压缩包中包含的是Vagrant的安装文件“vagrant_2.2.5_x86_64.msi”。 Vagrant的核心概念包括: ...
vagrant centos7 镜像
vagrant-golang, 一个很容易使用的golang环境,可以与vagrant一起使用 Golang Vagrant环境其他语言相比,Golang 有稍微复杂一点的设置过程,因为它使用了一个基于xml的工作区概念。 使环境错误意味着许多go命令会...
Vagrant 2.1.1 版本是针对 Windows 10 用户推荐的一个稳定版本,旨在提供无缝的开发体验,与 VirtualBox 5.2.12-122591 配合使用,可以实现高效的虚拟化。 Vagrant 的核心概念是基于盒子(Box)的,一个盒子包含了...
这个压缩包 "vagrant_2.2.7_x86_64.rar" 包含了 Vagrant 的安装程序 "vagrant_2.2.7_x86_64.msi" 和一个名为 "vagrant.txt" 的文本文件,可能是关于安装或使用 Vagrant 的说明或者版本信息。 Vagrant 的核心理念是...
vagrant-rackspace, 使用Vagrant管理Rackspace云实例 Vagrant云提供商这是一个 Vagrant 插件that向Vagrant添加一个云提供程序,允许Vagrant控制和供应Rackspace云中的计算机。注意:这个插件需要 Vagrant 。 Windows...
### Vagrant 1.8简介 Vagrant 是一个开源工具,用于构建和维护可重复使用的开发环境。它能够帮助开发者轻松地创建一致的开发环境,无论是在本地机器还是在云端。Vagrant 1.8 版本是该系列中的一个稳定版本,提供了...
默认情况下,它会使用Vagrant的默认 boxes(预配置的虚拟机镜像)。 4. **配置Vagrantfile**:在Vagrantfile中,你可以指定虚拟机的配置,例如操作系统类型(如Ubuntu、CentOS等)、内存大小、网络设置等。 5. **...
ansible-vagrant-examples, 使用Vagrant部署到本地vm的Ansible示例 Ansible Vagrant示例这个库包含运行各种应用程序的示例虚拟机的Collection 。 vm是通过Vagrant创建的,通过Ansible提供。你可以以在任何包含的目录...
3. 添加box:使用`vagrant box add`命令添加box,例如`vagrant box add ubuntu/trusty64`将添加一个Ubuntu Trusty 64位的box。 4. 初始化虚拟机:在Vagrantfile所在的目录下运行`vagrant init`,根据Vagrantfile的...
在软件开发中,Vagrant 可以帮助开发者创建轻量级、可重复的开发环境,使得团队成员之间的工作环境保持一致,无论他们使用的是什么操作系统。最新版本的 Vagrant 为 2.2.7,这是一个重要的更新,可能包含性能优化、...
"使用 Vagrant 在 VirtualBox 中搭建 CentOS 虚拟机" 在 VirtualBox 中使用 Vagrant 搭建 CentOS 虚拟机是一种非常方便和灵活的虚拟机管理方式。下面是关于使用 Vagrant 搭建 CentOS 虚拟机的知识点: 1. 安装 ...