Vagrant是什么,不是什么。
Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。
Vagrant的运行,需要依赖某项具体的虚拟化技术。由于VirtualBox是一项开源的虚拟化软件,可以同时在Windows、Linux、Macintosh、SSolaris等操作系统上运行并支持众多对众多操作系统的虚拟化,因此,在Vagrant开发的初期,唯一支持的是VirtualBox。随着虚拟化技术的快速发展,现在已经有了更多的虚拟化技术可供选择。VMware、HyperV、Docker等都已经可以通过Vagrant的管理而工作。Windows的HyperV技术在部分Windows发行版本中的集成,使得Vagrant在“开盒即用”的特性方面前进了一大步。
因此,Vagrant是虚拟机管理工具,不是某项具体的虚拟化技术。对于各项虚拟化技术而言,Vagrant提供了一套基于配置文件和命令行的管理工具。也正是因为如此,Vagrant完成了对虚拟化技术在一定程度上的封装。这为将虚拟化技术引入到基于桌面运行环境的开发工作流中创造了便利条件。
为什么要使用Vagrant
尽可能避免”Work on my machine“错误
在Vagrant没有出现之前,在服务器端进行开发的人们通常都拥有一个专用的开发帐号。使用这个帐号,开发者可以在一定限度内配置自己的开发环境、完成编码、进行测试并完成向开发团队代码库的代码推送。于是,在团队合作开发的过程中,一个问题出现了:当A进行了一次新的代码推送之后,原本可以通过的代码持续集成测试无法通过了。通过代码检查,发现A的代码出现了异常。而A在自己的开发环境中的测试是可以通过的。这类错误被Vagrant称作为“Work on my machine”错误。这类错误要定位解决通常耗时很久。在一个可以进行面对面开发的团队中,问题的定位由于沟通手段的丰富相对较快。如果是分散在不同地方的人在合作开发,那么要解决此类错误,就没有那么简单了。
小张在自己的机器上辛苦的完成了一项功能开发,通过了本机上的各项测试,高高兴兴的向团队代码库提交的自己的工作成果。心想终于可以放松一下了。“是不是可以买一只机械键盘犒劳一下?晚上和伙伴们出去聚会吧!嘿嘿。”小A心里美滋滋的想。
“小张,你来一下,代码有问题”。临近下班的时候,小A接到QA小组的一个电话。“怎么回事?”小张一头雾水的走进了QA小组的办公区。
“你今天下午提交的代码,无法通过测试。你自己做了测试了吗?”,老王是QA小组测试负责人,他面色凝重的问小张,“咱们就要发布一个新的代码版本了。这个时候你的代码出问题,可能会影响代码发布的。要不你赶紧看看?明天上午能修复吗。我们的测试报告和测试规范在这里”。
“明明没有问题的呀”,出了QA的办公区,小张仍然迷惑不解。“在我的机器上明明是可以运行的。而且为了晚上的聚会,测试规范中定义的各项测试也是提前跑过的呀。看来今天晚上的聚会要取消了。“小张无奈的拿出电话,打算给好友们打电话,通知自己无法参加晚上的聚会了。
好吧,借助Vagrant,每一个开发者都可以得到一份服务器运行环境的虚拟机,可以以虚拟机的方式运行一个微型的”生产环境“。这样,在提交代码之前,开发这就可以在虚拟机上完成”生产环境“的验证。自然可以解决上面的问题了。
如何使用vagrant在虚拟机安装Hadoop集群 http://www.linuxidc.com/Linux/2013-04/82750.htm
Vagrant 中高效的 Puppet 模块管理 http://www.linuxidc.com/Linux/2014-05/101873.htm
利用Vagrant搭建多平台环境 http://www.linuxidc.com/Linux/2015-09/123518.htm
使用 Vagrant 和 Fabric 用于集成测试 http://www.linuxidc.com/Linux/2014-07/104113.htm
使用 Vagrant 搭建开发环境 http://www.linuxidc.com/Linux/2014-07/104116.htm
Windows 下配置 Vagrant 环境 http://www.linuxidc.com/Linux/2014-07/104115.htm
使用 Vagrant 搭建开发环境 http://www.linuxidc.com/Linux/2014-07/104116.htm
通过 Vagrant 搭建虚拟机环境 http://www.linuxidc.com/Linux/2015-08/121985.htm
使用Vagrant和Virtualbox创建虚拟机 http://www.linuxidc.com/Linux/2016-08/134435.htm
Ubuntu下使用Vagrant搭建虚拟开发环境 http://www.linuxidc.com/Linux/2016-12/138113.htm
缩短搭建开发环境的时间
搭建一个开发环境,需要完成操作系统的安装,必要的开发支撑软件的安装,配置操作系统和代码运行环境。如果所有的操作都需要由人来手动操作的话,一个下午的时间是必要的。搭建开发环境是团队中新人加入时的必不可少的第一课。而团队的老人们,无可避免的会接到无数的“新手”的发问。更不用说,当著名的Wxdows系统需要重新安装系统的时候,无论谁,基本上一天的工作时间算是交代了,更不用说各类开发软件的配置如果会影响代码执行结果的时候会引入什么样的“灾难”了。使用Vagrant实现开发环境的快速搭建成为提升效率的显著功能特性之一。
Vagrant提供了统一的安装程序配置环境:
- 使用统一的配置文件(
vagrantfile
)实现对服务器的统一配置。 - 使用共享文件夹(
shared folder
)实现代码编辑向“服务器”的快速提交 - 使用软件配置脚本(
Provisioning scripts
)实现服务器上的运行环境的快速建立 - 拥有标准化的虚拟机分享网络,极大缓解了分享开发环境配置时的网络带宽压力
- 可以具备一个供安装维护测试使用的可抛弃的服务器端环境。
小李是进入开发团队的新人。从学校毕业出来,小李就到了一个公司从事服务器端的软件开发工作。由于兴趣爱好的原因,他新近加入了这个网游开发团队。他接到的第一个命令就是“搭建一个服务器工作日志分析系统,为服务器代码优化改进做准备”。
小李从团队项目经理那里得到了服务器环境安装手册以及服务器日志数据库设计文档。小李需要在自己的机器上用虚拟机安装一套服务器环境,用以进行日志数据的分析和提取。
“好吧,估计这几天的时间要搭到系统安装里去了。”小李做好了心理准备,打开了服务器环境安装手册。意外的,手册很简单:
- 安装Vagrant和VirtualBox,从文件服务器(地址XX.XX.XX.XX/Software)下载Vagrant、VirtualBox安装文件,并完成安装
- 执行
git clone git@xx.xx.xx.xx:vagrantconfig.git
获取vagrant配置文件- 进入vagrantconfig目录,运行
Vagrant up ftp://xx.xx.xx.xx/vagrant/trusty-server-cloudimg-amd64-vagrant-disk1
- 执行
vagrant ssh
验证安装- 从文件服务器(xx.xx.xx.xx/data)下载日志数据库dump文件,完成Mysql数据库内容的加载
- ……
“这就完了?”半个小时后,小李目瞪口呆的看着自己机器上运行的虚拟机,一套服务器日志系统已经加载完成了。小李已经可以着手进行数据的分析并开始做具体编码设计了。
小结
如果还在为“Work on my machine”错误头疼,如果安装开发环境还是团队心头的痛,那为什么不试试用用Vagrant呢?
Vagrant的主要使用者
对于需要在服务器端进行开发的人,Vagrant管理的虚拟机镜像提供了统一的生产运行环境。开发者可以随心所欲的决定什么时候想“服务器”端发布程序,什么时候在“服务器”端进行必要的测试,而丝毫不用担心会影响生产环境服务器的稳定运行。
对于各类设计人员,使用Vagrant,可以让设计人员可以随心所欲的选择自己的开发用操作系统、设计软件、编辑IDE软件,可以通过与虚拟机之间的共享目录,快速实现设计文件在生产环境中的测试验证。
对于系统维护人员,使用Vagrant,可以随意进行对系统安装设置的过程进行演练,验证工程安装手册的完备程度。也可以对系统维护中的各项操作指令随意进行实验。这对于提升售后服务团队的问题快速解决能力,获得实战经验的非常重要的手段。
Vagrant对开源开发的贡献
开源的开发者常常无法像一个普通团队那样面对面的坐在一起进行开发工作。由于开发团队是一种松散的组织模式,因此,也不是每一个开发者都可以获得在服务器端上的开发授权。此时Vagrant就提供给这些开发者必要的代码运行环境,极大程度的提升了开源开发者向开发中心小组提交代码的质量。此外,Vagrant的虚拟机分享模式,也使得开源开发者获得统一的服务器运行环境的成本变得异乎寻常的低廉。
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-12/138932p2.htm
1. 关于Vagrant
Vagrant是一个虚拟机管理工具。可以实现快速的虚拟机镜像分发和使用。可以说,Vagrant使得虚拟机技术的使用门槛大大降低。让所有人都可以快速的使用虚拟机投入到具体的开发工作中去。(尤其对于那些需要在服务器环境中进行开发的人来说)。
2. 安装Vagrant
Vagrant的安装非常简单,从它的主页上可以方便的下载得到在各种操作系统下的安装程序。我使用的是Win7操作系统。因此直接下载对应操作系统的安装程序即可。Vagrant的安装符合win7下安装应用的一般过程。这就不用多说了。
要使用Vagrant,当然需要虚拟化技术的支持。目前Windows操作系统已经支持的HyperV的虚拟化技术。对于Win7操作系统来说,默认并没有提供该项功能。需要单独从Microsoft的网站上安装。在其他的虚拟化技术中,由于VirtualBox是开源的,并且在各类操作系统中均有运行环境,因此在Vagrant一开始支持的虚拟化技术中,VirtualBox是首先得到支持的。目前VMWare的虚拟化技术也已经得到了Vagrant的支持。为了方便学习,我选择VirtualBox作为虚拟化解决方案。当然,关于Vagrant使用VirtualBox的各类教程,也是最多的。
VirtualBox的安装,同样,从主页下载程序后执行安装即可。
3. 配置Vagrant和VirtualBox
Vagrant和VirtualBox安装完成后,默认存放虚拟机镜像文件的位置在系统盘。这对于大多数系统盘容量有限的人来说,很快就会收到“磁盘容量不足”的告警。通过必要的设置将镜像数据移出系统盘。
3.1. 更改VirtualBox的镜像文件存放位置
具体步骤如下:
- 打开VirtualBox,从菜单项选择 全局设置 (快捷键是 Ctrl-G )
- 选择 常规 里的 默认虚拟电脑位置(M)
- 设置为非系统盘的位置。
- 将原位置中的虚拟机镜像移动到新的位置。
- 如果在设置前已经安装了虚拟机,那么在Windows 资源管理器中,选择对应目录中的 Vbox 文件,即可将新目录中的虚拟机镜像添加到VirtualBox中。
3.2. 更改Vagrant的镜像存储位置
Vagrant对于虚拟机的管理分成两个部分:Box和Machine。Box是指初始的未部署的虚拟机镜像文件。这个文件相当于是虚拟机的一个模板,可以进行无限制次数的复制。Machine,是指处于可运行状态下的虚拟机。当在Vagrant中添加box是,默认Vagrant会将这些虚拟机模板镜像文件存放在c:\User\<Username>\.Vagrant.d
里。因此,当使用Vagrant管理的虚拟机模板镜像较多时,这个目录也是比较大的。可以转移到其他磁盘分区上。方法是:
- 将
c:\User\<username>\.vagrant.d
目录移动到新的位置 - 设置
VAGRANT_HOME
环境变量指向新的位置即可。
4. 使用vagrant添加虚拟机镜像
4.1. 从互联网添加虚拟机镜像文件
在正式使用Vagrant前,建议先添加vagrant的镜像文件。使用如下指令添加虚拟机模板镜像文件:
E:\vagrant_starter>vagrant box add Ubuntu/trusty64
执行上面的指令后,系统会自动从互联网下载相应的镜像文件。执行上述指令后,会得到如下的输出:
E:\vagrant_starter>vagrant box add ubuntu/trusty64
==> box:Loading metadata for box 'ubuntu/trusty64'
box: URL: https://vagrantcloud.com/ubuntu/trusty64==> box:Adding box 'ubuntu/trusty64'(v14.04)for provider: virtualbox
box:Downloading: https://atlas.hashicorp.com/ubuntu/boxes/trusty64/versions/14.04/providers/virtualbox.box
box:Progress:0%(Rate:7168/s,Estimated time remaining:21:27:41)
当 Progress 进展到100%时,相应的镜像就添加到Vagrant中可供随时克隆使用了。
TIP : 在VagrantCloud有大量已经制作好可供下载的基础镜像文件。有兴趣可以去看看,能减少自己做系统的时间。
4.2. 从本地添加镜像文件
从互联网添加是最基本的方法。从本地已经下载好的文件中添加镜像文件当然会更加的方便。要添加本地已下载好的镜像文件,执行如下指令即可:
E:\vagrant_starter>vagrant box add ubuntu/trusty64 file:///e:\download\trusty-server-cloudimg-amd64-vagrant-disk1.box
5. 初始化虚拟机
开始使用虚拟机,首先需要将虚拟机模板镜像导入“工作环境”。如前所属,已经添加了 ubuntu/trusty64 镜像之后,可以之间使用如下指令完成相关虚拟机的初始化。
E:\vagrant_starter>vagrant init ubuntu/trusty64
A `Vagrantfile` has been placed inthis directory.You are now
ready to `vagrant up` your first virtual environment!Please read
the comments in the Vagrantfileas well as documentation on
`vagrantup.com`for more information on usingVagrant.
如果以前没有使用 vagrant box add
指令,直接使用init命令时,会先添加box,完成后再执行初始化操作。
6. 使用虚拟机
6.1 启动虚拟机
启动虚拟机只需要一个指令,并且可以得到一下输出:
E:\vagrant_starter>vagrant up
Bringing machine 'default' up with'virtualbox' provider...==>default:Importingbase box 'ubuntu/trusty64'...==>default:Matching MAC address for NAT networking...==>default:Setting the name of the VM: git-server_default_1418350291527_32287
==>default:Clearing any previously set forwarded ports...==>default:Clearing any previously set network interfaces...==>default:Preparing network interfaces based on configuration...default:Adapter1: nat
==>default:Forwarding ports...default:22=>2222(adapter 1)==>default:Booting VM...==>default:Waitingfor machine to boot.This may take a few minutes...default: SSH address:127.0.0.1:2222default: SSH username: vagrant
default: SSH auth method:private key
==>default:Machine booted and ready!==>default:Checkingfor guest additions in VM...==>default:Mounting shared folders...default:/vagrant => E:/vagrant_starter
6.2 登录虚拟机
要登陆虚拟机可以使用 Vagrant ssh
命令登录虚拟机系统。登录后可以看到:
E:\vagrant_starter>vagrant ssh
Welcome to Ubuntu14.04.1 LTS (GNU/Linux3.13.0-40-generic x86_64)*Documentation: https://help.ubuntu.com/System information as of FriDec1202:12:05 UTC 2014System load:0.36Processes:91Usage of /:2.8% of 39.34GBUsers logged in:0Memory usage:21% IP address for eth0:10.0.2.15Swap usage:0%Graphthis data and manage this system at:
https://landscape.canonical.com/Get cloud support withUbuntuAdvantageCloudGuest:
http://www.ubuntu.com/business/services/cloud0 packages can be updated.0 updates are security updates.
vagrant@vagrant-ubuntu-trusty-64:~$
如果你得到了以上的输出显示,好的,你已经成功登录到你的 私有 服务器上了。在你自己的服务器上撒泼打滚吧,在这个服务器上,你就是 上帝 。
7. 停止或删除虚拟机
要停止虚拟机的运行,可以使用如下指令:
-
虚拟机关机:
E:\vagrant_starter>vagrant halt
-
虚拟机挂起:
E:\vagrant_starter>vagrant suspend
-
删除虚拟机:
E:\vagrant_starter>vagrant destory
危险:虚拟机删除后,所有在虚拟机中做的改动都不再存在。如果重新使用,需要再次使用init命令初始化。此时得到的将是一个全新的虚拟机。所以,注意安全。
8. 参考文档:
- Vagrant官方文档: https://docs.vagrantup.com/v2/
- 小硬盘伤不起-将Vagrant移出系统盘的方法: http://www.linuxidc.com/Linux/2016-12/138933.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138932.htm