关键词:
一、vagrant 工作原理
二、vagrant与docker的区别
vagrant是用来管虚拟机的,而docker是管容器的
docker的启动速度当然是无可比拟的,而vagrant当然不是要很docker比启动速度的,vagrant就是管虚拟机的,虚拟机与容器的区别,大家见仁见智。
再来介绍一下vagrant:
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境---百度百科
首先提一个需求,我想批量的创建一批虚拟机,基于不同的镜像,基于不同的系统(这里主要是Linux系统),每个主机拥有若干网卡并分配指定网段及IP。
如果是vmware,我想大多数人想的是不停的点击不同的按钮已完成上面的需求,当然了,如果用py Vm omi也许并不需要太多的人工点击(笔者觉得一步一步的重复点击是很反人类的~)
如果是其他云平台,当然是借助API了,不过我想创建的这一批主机是能像docker一样分发的,比如让每个人在主机的电脑上就能简单的创建所需环境,而在私有云上,每人一套可能就太浪费资源了,每个人公用,又显得不是那么干净。
如果不是以主机为单位,基于docker,将服务应用打散,放置于各个容器,并用docker编排工具如kubernetes,compose什么的来创建也是不错的,不过这里为了突出一下vagrant的便捷就以主机为单位了。
需求继续具体如下,2个app server,2个db server,1个负载均衡lb server
三、简单的vagrant安装、配置
1.vagrant安装
1.1 安装virtualbox
1.2 安装vagrant
下载对应的安装包
Install | Vagrant | HashiCorp Developer
因为个平台都有对应的安装包,所以安装过程就不做过多介绍
本文主要在window上操作
virtualbox 4.2.36
vagrant 1.8.1
Linux平台如centos参考 http://blog.csdn.net/swebin/article/details/69948914
安装完成后应该是这样的
然后之主要用的几个命令,详细说明参考,官方文档:Documentation | Vagrant | HashiCorp Developer
本文主要说明以下几个选项
1 |
box,destroy,global-status,halt,init,package,resume,
ssh
,status,suspend,up
|
上面命令总结起来主要分为五个部分
一:按照一定格式打包的vagrant环境文件,类似镜像文件
box
二:虚拟机操作(destroy,halt,init,suspend,up)
销毁,关机,初始化,恢复,挂起,开机
三:打包
package
四:连接
ssh
五:虚拟机状态
status,global-status
在建立一个虚拟机之前,当然需要一个镜像,这里就是以.box为后缀名的box文件,这里可以本地添加或者在线添加
box下载地址:A list of base boxes for Vagrant - Vagrantbox.es
vagrant box list 查看当前box列表
本地添加box,如下
1 |
vagrant box add centos6 E:\\vagrant\\box\\centos65.box
|
centos6是我们为自定义的box名字,后面会用到,最后接的是box文件路径
注:建议本地添加时候工作目录与box文件在同一磁盘下,比如C盘,D盘
在线添加box,在线添加的box名称格式为 用户/box名,参考https://atlas.hashicorp.com/boxes/search,如下
1 2 3 4 |
vagrant box add hashicorp
/precise64
或者
vagrant box add
https:
//github
.com
/2creatives/vagrant-centos/releases/download/v6
.4.2
/centos64-x86_64-20140116
.box
|
查看box列表
现在我们可以初始化一个我们需要的虚拟机了
创建一个工作目录,用于存储相关文件
1 |
vagrant init
|
会在当前目录创建一个Vagrantfile文件,这个文件告诉vagrant我们要创建一个怎么的虚拟机
这里我们执行
1 |
vagrant init centos6
|
将所有注释去除后,主要内容如下
1 2 3 |
Vagrant.configure(2)
do
|config|
config.vm.box =
"centos6"
end
|
上面的 config.vm.box = "centos6",主要是说明基于哪个box文件。
然后启动
1 |
vagrant up
|
启动过程如上。
启动之后我们可以直接ssh进去
1 |
vagrant
ssh
|
关机则是
1 |
vagrant halt
|
挂起
1 |
vagrant suspend
|
从挂起状态恢复
1 |
vagrant resume
|
整机虚拟机销毁,有点从磁盘上移除的意思
1 |
vagrant destroy
|
注:上面的命令都得在vagrantfile文件所在目录
然后是查看虚拟机状态
1 |
vagrant status
|
查看当前目录下vagrantfile文件对应的虚拟机状态
1 |
vagrant global-status
|
查看全局虚拟机状态
注:既然虚拟机,当然能执行快照什么的,请自行探索
入门结束。。。
四、目标:批量创建2个app server,2个db server,1个负载均衡lb server
想必也能看出来,比较照重要的是vagrantfile文件,这个文件告诉vagrant需要执行什么,创建什么。
首先定义每个虚拟机对应的ip及主机名,如下
1 2 3 4 5 6 7 8 |
app_servers = :app1 => [
'192.168.13.2'
,
'192.168.15.3'
],
:app2 => [
'192.168.13.3'
,
'192.168.15.4'
]
db_servers = :db1 => [
'192.168.14.2'
,
'192.168.15.5'
],
:db2 => [
'192.168.14.3'
,
'192.168.15.6'
]
lb_servers = :lb1 =>
'192.168.15.2'
|
因为是基于ruby的,所以类似python中的列表,字典的写法什么的稍稍不同,不过也不难看懂,以答案推答案嘛
app-server定义了两个主机app1,app2,并绑定两块网卡的ip地址
db-server如上
lb-server就一个
然后当然是循环了,如果一条一条的说明,也就没必要声明app-servers之类的
1 2 3 4 5 6 7 |
app_servers.each
do
|app_server_name,app_server_ip|
config.vm.define app_server_name
do
|app_config|
app_config.vm.host_name = app_server_name.to_s
app_config.vm.network :private_network,ip: app_server_ip[0]
app_config.vm.network :private_network,ip: app_server_ip[1],virtualbox_inet:
true
end
end
|
主要有两点说明
一:有几个do,就有几个end
二:遍历app-server,用app_servers.each do |app_server_name,app_server_ip|,而其中app_server_name,app_server_ip当然是遍历时候的变量了,对应app-server里面的app1,['192.168.13.2','192.168.15.3']
config.vm.define 定义创建的主机名
app_config.vm.host_name 定义hostname
app_config.vm.network :private_network,ip 定义网卡绑定ip
完整如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Vagrant.configure(2)
do
|config|
config.vm.box =
"centos6"
end
app_servers = :app1 => [
'192.168.13.2'
,
'192.168.15.3'
],
:app2 => [
'192.168.13.3'
,
'192.168.15.4'
]
db_servers = :db1 => [
'192.168.14.2'
,
'192.168.15.5'
],
:db2 => [
'192.168.14.3'
,
'192.168.15.6'
]
lb_servers = :lb1 =>
'192.168.15.2'
app_servers.each
do
|app_server_name,app_server_ip|
config.vm.define app_server_name
do
|app_config|
app_config.vm.host_name = app_server_name.to_s
app_config.vm.network :private_network,ip: app_server_ip[0]
app_config.vm.network :private_network,ip: app_server_ip[1],virtualbox_inet:
true
end
end
db_servers.each
do
|db_server_name,db_server_ip|
config.vm.define db_server_name
do
|app_config|
app_config.vm.host_name = db_server_name.to_s
app_config.vm.network :private_network,ip: db_server_ip[0]
app_config.vm.network :private_network,ip: db_server_ip[1],virtualbox_inet:
true
end
end
lb_servers.each
do
|lb_server_name,lb_server_ip|
config.vm.define lb_server_name
do
|app_config|
app_config.vm.host_name = lb_server_name.to_s
app_config.vm.network :private_network,ip: lb_server_ip
end
end
end
|
其实一次性启五个,一般的电脑(指4GB)是稍显吃力的,所以要么在自己机房的服务器上玩,要么在稍微好点的主机上玩吧~~~
后记:个人觉得vagrant对于运维还是很友好的,基于命令行的工具才足够酷(个人感觉)~而且一些情况下,我们需要频繁的创建虚拟机去测试,搭建一些服务集群的时候,需要一个轻量,简易,可重复,具有可靠性的环境,而这些,vagrant是能够提供的,比起在vmware或者私有云上创建虚拟机还是更加简单并好用的,
如何从本地 VirtualBox / Vagrant 开发环境部署到生产环境?
】如何从本地VirtualBox/Vagrant开发环境部署到生产环境?【英文标题】:HowisdeploymenttoProductiondonefromlocalVirtualBox/Vagrantdevelopmentenvironment?【发布时间】:2014-08-0218:04:51【问题描述】:最近我开始阅读有关使用虚拟化软件构建开发环境... 查看详情
windows7/8/10系统下laravel框架的开发环境安装及部署详解(vagrant+homestead)(代码片段)
...//atlas.hashicorp.com/laravel/boxes/homestead而已经变更成https://app.vagrantup.com/laravel/boxes/homestead如果是刚刚接触Laravel的朋友,请直接按文中步骤操作。需要更新及重装的朋友们请注意使用第二个地址来进行 查看详情
windows7/8/10系统下laravel框架的开发环境安装及部署详解(vagrant+homestead)(代码片段)
...//atlas.hashicorp.com/laravel/boxes/homestead而已经变更成https://app.vagrantup.com/laravel/boxes/homestead如果是刚刚接触Laravel的朋友,请直接按文中步骤操作。需要更新及重装的朋友们请注意使用第二个地址来进行 查看详情
windows下vagrant的安装使用
vagrant是简便虚拟机操作的一个软件,而使用虚拟机是为了开发环境与生产环境一致(很多开发环境为windows而生产环境为linux),不至于出现在开发环境正常而移步到正式生产环境时出现各种问题,vagrant通过共享文件,可以实现... 查看详情
windows上使用vagrant打造laravelhomestead可协同跨平台开发环境
...ad是一个打包好各种Laravel开发所需要的工具及环境的 Vagrant 查看详情
ubuntu环境利用vagrant搭建一个虚拟开发环境
Vagrant是一个搭建完整的虚拟开发环境的工具,通常简写为VDE(VirtualDevelopmentEnvironment)。Vagrant节省大量重建操作系统环境的时间,它也是一个配置中心,允许你使用一个相同的配置管理和部署多个VDE。安装Vagrant的同时,你也需... 查看详情
在windows下用vagrant建立lnmp开发环境
1.安装vagrant,vitrualbox2.下载homestead的box包,并添加到vagrant下载地址:https://atlas.hashicorp.com/laravel/boxes/homestead如果这里没有看到下载链接,可以将版本号拼接为如下地址进行下载,即将下面的0.2.6换成下载对应的版本。https://atlas.has... 查看详情
在windows下用vagrant建立lnmp开发环境
1.安装vagrant,vitrualbox2.下载homestead的box包,并添加到vagrant下载地址:https://atlas.hashicorp.com/laravel/boxes/homestead如果这里没有看到下载链接,可以将版本号拼接为如下地址进行下载,即将下面的0.2.6换成下载对应的版本。https://atlas.has... 查看详情
vagrant之运维,搭建统一开发环境
特点:通过vagrant打包环境,可以跨平台使用。意思就是在windows下可以使用ubuntu系统配置的环境使用的平台:windows+64位需要准备的工具: virtualbox:虚拟机 https://www.virtualbox.org/w... 查看详情
使用vagrant打造跨平台开发环境
Vagrant 是一款用来构建虚拟开发环境的工具,非常适合php/python/ruby/java这类语言开发web应用我们可以通过Vagrant封装一个Linux的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却... 查看详情
vagrant初识(代码片段)
vagrant是部署虚拟开发环境的工具,他可以简化虚拟机配置,为我们搭建和配置轻量级可重用,可移植的开发环境。他能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境。 vagrant支持VirtualBox,VMware,AWS... 查看详情
vagrant使用小结
vagrant使用小结最近公司用了vagrant的虚拟镜像服务,感觉挺不错的.在此仅记录使用方法.优点:我们可以通过Vagrant封装一个Linux的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却... 查看详情
vagrant搭建虚拟化开发环境初识(代码片段)
Vagrant简介 Vagrant是一款用来构建虚拟开发环境的工具,它是用来管理虚拟机的,同时也非常适合php/python/ruby/java这类语言开发web应用,“代码在我机子上运行没有问题”这种说辞将成为历史。我们可以通过Vagrant封装一个Linux... 查看详情
mac下安装vagrant虚拟环境(代码片段)
为了方便测试,我在mac电脑中安装了两个vagrant虚拟环境。一个是centos7,里面是oneinstack,ip:192.168.33.10一个是用于Laravel开发的Homestead。ip:192.168.10.10另外又安装了一个windows10。Vagrant简介Vagrant是一个基于Ruby的工具,用于创建和部署虚... 查看详情
docker学习(03)--安装部署2
Vagrant与Docker对比 Vagrant和Docker都是虚拟化技术。Vagrant是基于Virtualbox的虚拟机来构建你的开发环境。Docker则是基于LXC(LXC)轻量级容器虚拟技术。虚拟机之于容器虚拟技术相当于进程和线程。虚拟机内可以包含很多容器,正如... 查看详情
vagrant-安装教程及常见问题(代码片段)
前言:Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它的主要意义是让所有开发人员都使用和线上服务器一样的环境,本质上和你新建一个虚拟机。 那最常见的,正常我们是怎么开发呢,大... 查看详情
golang开发:开发环境搭建vagrant+virtualbox(代码片段)
...不管何种开发语言,目前用的比较多的开发环境基本就是Vagrant+VirtualBox搭建的虚拟开发环境,这种开发环境的好处就是一次搭建处处可用,各个平台和系统都可以使用。开发团队中,可以自己制作一个box,让团队的成员方便安装... 查看详情
我应该使用 Vagrant 还是 Docker 来创建隔离环境? [关闭]
】我应该使用Vagrant还是Docker来创建隔离环境?[关闭]【英文标题】:ShouldIuseVagrantorDockerforcreatinganisolatedenvironment?[closed]【发布时间】:2013-05-1420:47:40【问题描述】:我使用Ubuntu进行开发和部署,并且需要创建一个隔离的环境。为... 查看详情