vagrant

什么是Vagrant
简单来说,Vagrant 就是一个虚拟机的集成管理器。

我们用它可以快速创建虚拟机,可以快速部署好所需的各种环境,无论你想要开发环境或是上线环境都能一键搞定。甚至你可以部署多台都没问题。

想想看,假设一台Application Server,再加一台Master Database + 一台Slave Database,也许可以再来一台Monitor Server等等,全部都可以用你那台开发工作的电脑来实现,只要有足够内存。是不是很牛的样子?所以说,要让我们不用Vagrant,给个理由先?

安装
我们所需要的实际是 Vagrant+Virtualbox 这两样东西。

Vagrant可以在上面列出的官网去下载软件包,目前最新版本是1.2.7。

Vagrant支持的是Virtualbox这个虚拟机软件。Virtualbox是开源的,它以前是独立发布,现在已经被Oracle收购了,直接去官网下载安装即可。另外,Vagrant还支持VMvare虚拟机,不过这个功能是收费的,一般就不用考虑了。

基本使用
添加Box源
我们要先确定使用什么系统,是准备用Ubuntu,还是上Centos,或者BSD系列。确定好后,我们就可以到vagrantbox.es这个地方查找。Vagrant把每个打包好的虚拟机系统叫做box。这里都是网络上的热心人已经打包好的box,各种系统都有,必有一款能满足你的需要。

例如我习惯使用CentOS,就可以这样来添加一个box到Vagrant里:

vagrant box add CentOS-64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box
这样Vagrant就会下载这个box,下载完成后添加到自己的box列表里。可以用:

vagrant box list
来查看。如果网速不够快,一个技巧就是可以先把这个box下载到本地,然后在上面命令中使用本地文件地址就好了。

每个box都相当一个系统的安装源,接下来我们就要用到了。

开始第一个虚拟机
我们新建一个工作目录vm,然后在vm里使用这个命令:

vagrant init CentOS-64
然后我们会看到如下提示信息:

A Vagrantfil has been placed in this directory. You are now ready to vagrant up your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on vagrantup.com for more information on using Vagrant.

Vagrant在vm目录生成了一个“Vagrantfile”的设定文件。全部的设定都在这个文件里,我们先不管,以后再研究。现在先让虚拟机跑起来!

输入命令:

vagrant up
稍微等待一段时间后,我们就会看到Vagrant会输出很多行信息:

<code>
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
</code>

Yes!虚拟机已经正式在运行了。

那么怎么连上去呢?照常规那样开一个ftp软件,输入ip、帐号、密码去连接吗?No!

vagrant ssh
这个命令直接就把你送进虚拟机去了。默认帐户是vagrant,密码一样。现在开始折腾这台机器吧……

另外,虚拟机已经有一个/vagrant目录,和我所在的vm目录是直接映射的。vm里的任何文件都能在/vagrant目录里看到和使用。酷吧?

打包自己的Box
当你把自己的虚拟机做好所需的环境,例如我的CentOS-64会升级好yum软件包,安装好MySQL、PHP等环境后,不想以后每次都把这个过程重来一次,或者假如在团队里不想每个成员的开发环境各自五花八门乱七八糟,我就可以把这个做好的CentOS-64打包出来,分享给团队成员。

vagrant package
稍等一点时间后,Vagrant会在vm目录下输出一个package.box的文件。没错,这完全跟我们在上面vagrantbox.es下载的box文件一样的,实际上那里热心人分享的box文件都是这么来的。所以可以用同样的方法添加到box列表里去,例如:

vagrant box add CentOS-64S package.box
这样以后我们就可以直接使用这个新box来生成虚拟机:

vagrant init CentOS-64S
新虚拟机直接就是一个做好的PHP Server。

原来的CentOS-64这个box完全可以删掉了,还可以节省一点空间:

vagrant box remove CentOS-64
虚拟机的设定
上面说到Vagrant会为每个虚拟机都生成一个Vagrantfile设定文件。

用任意文本编辑器打开它,如果你对Ruby语言有一点了解的话,就会明白实际整个内容都是Ruby Code。而且Vagrant很贴心的准备了详尽到有些啰嗦的注释给你,这里强烈建议你仔细看看。实际对于每个选项设定都说的非常清楚了。

主要的设定大概有这么些:

注:下面提到的设定有些是默认注释掉的,没有开启,务必要取消注释才会生效。

config.vm.box = "CentOS-64"
这指定了虚拟机使用哪个Box源。

config.vm.network :forwarded_port, guest: 80, host: 8080

这个设定非常牛,它会把Host机器(就是安装Vagrant的机器)的8080端口转发(forwoard)到虚拟机的80端口。例如你部署到虚拟机的网站运行后,当你在Host机器上浏览器打开http://localhost:8080后,就会自动转到虚拟机正在运行的Apache或Nginx 80端口服务,也就是访问部署的网站。实际上,这个功能是架起了Host机器和虚拟机之间沟通的桥梁。 以此类推,我们可以增加更多的端口转发,如常用的MySQL 3306端口,Rails 的3000端口等。

config.vm.network :private_network, ip: "192.168.33.10"

config.vm.network :public_network

这两个是设定网络连接方式。前者把虚拟机网络设定为私有模式,和你Host机器同一网络的其他电脑是看不到它的。后者相反,设为公开模式,和你Host机器有类似的IP,同一网络的其他电脑都能看到它。一般都采用前者,而且IP也建议不以“192.168”开头,以免冲突,例如可以设为“66.66.66.10”这样……

vb.customize ["modifyvm", :id, "--memory", "1024"]
这个可以手工设定虚拟机使用多少内存,根据你自己情况来定就好。类似Linux这样的Server,一般512就够了。

其他的设定还有些,不是特别重要,读者可以自行去了解看看了。

多台虚拟机组合
我们的产品正式部署上线的时侯,经常都可能不是一台而采用多台服务器的情况。例如 Database 要和 Application 分开,Database 有时还有 Master、Slave 之分,有时还需要 Balance Server 等等。更重要的是,这么多台机器之间都是需要相互沟通的。那么在正式部署前进行实况模拟就是很有必要的了。

这时就正是Vagrant的英雄用武之地,这可是Vagrant的“杀手级功能”。重头戏登场!

我们来架设一台Web Server,一台Master Database + 一台Slave Database 的组合。

在Vagrantfile设定文件里改成这样:

Vagrant.configure("2") do |config|

  config.vm.define :web do |web|
web.vm.box = "CentOS-64"
web.vm.network :private_network, ip: "66.66.66.10"
  end

  config.vm.define :db0 do |db|
db.vm.box = "CentOS-64"
db.vm.network :private_network, ip: "66.66.66.20"
  end

  config.vm.define :db1 do |db|
db.vm.box = "CentOS-64"
db.vm.network :private_network, ip: "66.66.66.21"
  end

end

各项设定如同上述,只是名称分别使用了“web”、“db0”、“db1”,并且设定了不同的IP。

然后我们使用vagrant up启动,可以看到跑出来很多行信息,注意到每行前面都有类似“[web]”、“[db0]”这样的开头,表示各自是哪一台机器。信息流停止后,表示我们的虚拟机组合跑起来了!

SSH可以指定连到哪一台去:

vagrant ssh web

vagrant ssh db0
酷得一塌糊涂啊!!

再来看看各台虚拟机之间的连通。

先进去到Web Server:

vagrant ssh web
在web机器里连接db0:

ssh 66.66.66.20
轻而易举大功告成!

还有更牛的东西在后头呢。Vagrant允许你单独启动组合里某一台虚拟机,例如:

vagrant up web
只启动了Web Server,Database 机器并没有启动。

Vagrant甚至允许你在启动时使用正则表达式:

vagrant up /db[0-9]/
现在你启动全部Database Server了,即使你有db0,db1,db2...db9 这么多台也没问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容