Vagrant 初探
什么是 Vagrant?
简单来说,Vagrant 就是一个虚拟机的管理工具,运行在全平台上,主要用 Ruby 语言开发,只有命令行,没有 GUI。下面是 Vagrant 的在操作系统中的原理图:
为什么要使用 Vagrant?
为什么我要使用 Vagrant?假如我要虚拟一个操作系统,直接用虚拟机不就完了吗?
从个人的角度上,你完全可以使用图形化的虚拟机完成你想要的任何操作,你也可以把操作好的虚拟环境文件传给你其他的小伙伴。
但对一个开发团队来说,传统的虚拟机软件体积庞大,图形化管理,配置蛋疼。假如由于某些需求,或者团队成员之间开发沟通成本比较大的时候,统一团队系统环境比较蛋疼。可以说,Vagrant 的主要功能就是,给那些需要统一各队员本地软件运行环境的团队使用的。其次就是模拟一些拥有部署环境的虚拟服务器,类似 AWS,国内很少用到这点。
Vagrant有以下特点:
- configure(可配置)
- reproducible(可重置)
- portable(非常轻便)
下面的 demo 流程基本上就能提现出上面三点。
怎么使用 Vagrant?
使用 Vagrant 必须要基于某种虚拟机,virtual box 是 vagrant 官网推荐免费的非常轻巧的虚拟机。如需要其他的高大上的虚拟机,可以参考这里 (opens in a new tab)进行购买。下面我们使用 Vagrant,基于 OS X 安装。
Step1(下载)
到这里 (opens in a new tab)下载 virtual box 并安装。 到这里 (opens in a new tab)下载 Vagrant 并安装。 下一个 ubuntu 镜像 (opens in a new tab)的.box文件。(其他镜像到这里 (opens in a new tab)下载) 好,这么就可以开始了。
STEP2(配置和初始)
在你下载的 ubuntu 镜像目录下将这个.box文件添加到 vagrant 的 box 管理列表,并随便取一个名字。
$ vagrant box add ~/precise64.box --name lol
$ vagrant box list
lol (virtualbox, 0)
在你平时搞 project 的地方创建一个管理 vagrant demo 的文档,创建一个 demo1,然后用 init 创建刚刚加的 lol box。
$ cd ~/Project && mkdir vagrant && cd vagrant && mkdir demo1 && cd demo1
$ vagrant init lol
这时候你会看到 vagrant 会生成一个配置文件 Vagrantfile,可以打开进去读读里面的配置信息。 然后启动吧。
$ vagrant up
这时候会初始化一些东西,然后后台就会开启一个相对于当前文档的 ubuntu 虚拟机,可以进去查看一下。
$ vagrant global-status
id name provider state directory
220609b default virtualbox running /Users/FTAndy/Project/vagrant/demo5
$ vagrant ssh
...
vagrant@precise64:~$
STEP3(做些什么)
进入了虚拟机之后就可以配置你想要的环境了,可以安装一个 nginx 玩玩。
vagrant@precise64:~$ sudo apt-get update
vagrant@precise64:~$ sudo apt-get install nginx
在外面的 Vagrantfile 上设置 forwarded_port,将 guest 的80映射到 host 的8080。退出虚拟机之后 reload 一下配置。
config.vm.network :forwarded_port, guest: 80, host: 8080
vagrant@precise64:~$ exit
$ vagrant reload
OK。访问一下本地的8080端口吧。“Welcome to nginx!”
最后,可以把你做的东西打包起来,拿到.box文件,传给别人用。
$ vagrant package
然后会生成一个 package.box 文件,给你的小伙伴用吧。
其它
1.销毁
可以通过三种方式挂起活着关闭后台的vagrant程序:
- vagrant suspend(挂起,把虚拟机内存存到硬盘里,恢复快)
- vagrant halt(关闭,内存完全释放,纪录操作信息,恢复慢)
- vagrant destroy(销毁,把内存销毁,不会有任何记录,无法恢复)
2.同步文件
默认会同步所有在 Vagrantfile 下的文档和文件到根目录的 /vagrant
下,在外面编辑同时会同步到虚拟机里面。
3.外网映射机制
Vagrant 的网络配置支持3种:
将虚拟机的某个端口绑定到本机端口。
分配给虚拟机一个私有 ip,这样可以在本机上访问虚拟机的所有端口。
让虚拟机暴露在真实的网络中,跟本机同等。
用来开发的话,Forwarded ports 和 Private networks 就够了,如果要开放的端口比较多并且要用 rsync 这样的工具的话,Private networks 更方便。如果要给内网部署 Gitlab (opens in a new tab) 这样的工具给团队使用,则使用 Public networks。
4.常用命令
$ vagrant box add ~/xxx.box --name "your_box_name"
$ vagrant box list
$ vagrant init "your local box or online box"
$ vagrant up —provider=virtural_box
$ vagrant global-status
$ vagrant status
$ vagrant reload
$ vagrant package
$ vagrant halt
$ vagrant suspend
$ vagrant destroy
参考资料
- http://segmentfault.com/a/1190000000264347 (opens in a new tab)
- http://chloerei.com/2013/11/01/vagrant/ (opens in a new tab)
- https://www.vagrantup.com/ (opens in a new tab)
- https://github.com/mitchellh/vagrant (opens in a new tab)
- https://www.vagrantup.com/ (opens in a new tab)