vagrant
起源
久闻Vagrant大名,之前经常看到有开源项目使用它作为分布式开发的环境配置。
因为今天在看contiv正好里面使用vagrant搭建的开发测试环境,所以顺便了解下。它的Vagrantfile文件中定义了三台主机。并安装了很多依赖软件,如consul、etcd、docker、go等,整的比较复杂。
1 | vagrant status |
Vagrant是hashicorp这家公司的产品,这家公司主要做数据中心PAAS和虚拟化,其名下大名鼎鼎的产品有Consul、Vault、Nomad、Terraform。他们的产品都是基于Open Source的Github地址。
用途
Vagrant是用来管理虚拟机的,如VirtualBox、VMware、AWS等,主要好处是可以提供一个可配置、可移植和复用的软件环境,可以使用shell、chef、puppet等工具部署。所以vagrant不能单独使用,如果你用它来管理自己的开发环境的话,必须在自己的电脑里安装了虚拟机软件,我使用的是virtualbox。
Vagrant提供一个命令行工具vagrant,通过这个命令行工具可以直接启动一个虚拟机,当然你需要提前定义一个Vagrantfile文件,这有点类似Dockerfile之于docker了。
跟docker类比这来看vagrant就比较好理解了,vagrant也是用来提供一致性环境的,vagrant本身也提供一个镜像源,使用vagrant init hashicorp/precise64就可以初始化一个Ubuntu 12.04的镜像。
用法
你可以下载安装文件来安装vagrant,也可以使用RubyGem安装,它是用Ruby开发的。
Vagrantfile
Vagrantfile是用来定义vagrant project的,使用ruby语法,不过你不必了解ruby就可以写一个Vagrantfile。
看个例子,选自https://github.com/fenbox/Vagrantfile
Boxes
Vagrant的基础镜像,相当于docker images。可以在这些基础镜像的基础上制作自己的虚拟机镜像。
添加一个box
1 | vagrant box add hashicorp/precise64 |
在Vagrantfile中指定box
1 | Vagrant.configure("2") do |config| |
使用ssh进入vagrant
vagrant up后就可以用vagrant ssh $name进入虚拟机内,如果主机上就一个vagrant可以不指定名字。默认进入的用户是vagrant。
文件同步
vagrant up后在虚拟机中会有一个/vagrant目录,这跟你定义Vagrantfile是同一级目录。
这个目录跟你宿主机上的目录文件是同步的。
软件安装
在Vagrantfile中定义要安装的软件和操作。
例如安装apache
在与Vagrantfile同级的目录下创建一个bootstrap.sh文件。
1 | !/usr/bin/env bash |
然后在Vagrantfile中使用它。
1 | Vagrant.configure("2") do |config| |
网络
端口转发
1 | Vagrant.configure("2") do |config| |
执行vagrant reload或者vagrant up可以生效。
分享
你自己做的vagrant是可以分享给别人的用的,只要你有一个hashicorp账号,vagrant login后就可以执行vagrant share分享,会生成一个URL,其它人也可以访问到你的vagrant里的服务。
中止
vagrant suspend
Vagrant halt
Vagrant destroy
重构
再次执行vagrant up即可。
分布式环境
开发分布式环境下的应用时往往需要多个虚拟机用于测试,这时候才是vagrant显威力的时候。
定义多个主机
1 | Vagrant.configure("2") do |config| |
总结
总的来说说Vagrant没有Docker好用,但是对于协同开发,用它来定义分布式开发环境还可以,ruby的语法看着有点不习惯,好在也不复杂,如果是团队几个人开发,弄几个虚拟机大家互相拷贝一下也没那么复杂吧?
本文摘自网络