vagrant 上手教程
这部分将会教你上手第一个Vagrant程序,同时让你了解Vagrant提供的大多数功能。如果你很好奇使用Vagrant能带来什么好处,你可以详细了解为什么使用Vagrant?这个上手教程将会使用virtualbox。请安装好它。
有参考书籍吗?如果你喜欢实体书籍那么由Vagrant写作,由O’Reilly发版的Vagrant: Up and Running可以帮助你。
UP 和 RUNNING
|
|
当你运行完这两行命令,你会得到一个运行在VirtualBox上完整的Ubuntu 12.04 LTS 32-bit系统。你能使用SSH命令登录虚拟机vagrant ssh
,你想删除这个虚拟机vagrant destroy
。
现在想象一下,每个项目你都可以这样来创建,是不是很nice。
只用vagrant up
,就能完成项目依赖安装,设置网络,并建立任何网络和同步文件夹,您可以继续在自己的机器的舒适性的工作。
教程的其余部分将引导你完成一个更完整的项目,涵盖了Vagrant的更多功能。
项目设置
设置Vagrant项目的第一步是创建Vagrantfile文件。创建Vagrantfile有两个目的:
- 1.识别项目的根目录,项目根目录中会包含很多配置。
- 2.描述你需要哪种虚拟机以及你项目需要的资源,包括需要安装什么软件,什么用户可以访问等。
Vagrant可以使用命令vagrant init
来初始化目录。为了完成下面的练习,在你的终端使用如下命令:
|
|
它会当前目录给你创建一个Vagrantfile
文件。你可以看看Vagrant这个文件,里面有很多注释,方便你理解配置。不要被这些配置吓到,我们已经配置足够你使用了。
你同样可以使用vagrant init
来再次初始化当前目录,即使这个目录已经存在项目。
在你的项目中,如果你使用版本控制,那么Vagrantfile意味着是你的版本控制文件。
BOXS
从零构建一个虚拟机是枯燥无味的,Vagrant使用基础镜像快速的克隆虚拟机。这基础的镜像在Vagrant中叫boxes
。而你环境中使用的具体镜像是你Vagrantfile文件首先定义的。
安装一个BOX
如果你是练习了[UP 和 RUNNING][],那么你已经安装了一个box了,你可以不是再运行下面的命令了。但是,这小节还说明了box的管理,所以你还是需要看的。
使用vagrant box add
命令可以把BOX添加到Vagrant中。存储了box后,多个Vagrant环境都可以使用了。
|
|
这命令将会从HashiCorp’s Atlas box catalog下载box名称为hashicorp/precise32的镜像。HashiCorp’s Atlas box catalog是一个你可以寻找和下载镜像的地方。它使一个很方便的地方,你可以使用本地文件,URL等等添加box。
添加的box可以使用于多个项目。每个项目clone基础镜像作为初始化镜像,基础镜像并不会改变。这静意味着,如果你有两个项目都是使用了刚才添加的hashicorp/precise32
镜像,只用添加一次就可以了。
使用BOX
好现在BOX已经添加入Vagrant了,我们需要设置我们项目需要的镜像。打开Vagrantfile
修改内容为下:
|
|
“hashicorp/precise32” 必须是box中包括的。这是为了保证Vagrant知道你需要的box。如果这box之前没有添加,Vagrant会在box运行的、时候自动下载。
下一节,我们会会更多涉及到Vagrant环境和交互。
更多的BOXES
教程中我们只是使用了”hashicorp/precise32”box。但是当学完这个教程后你马上会想到“我可以从哪里找到boxes?”
找boxes最好的地方是HashiCorp’s Atlas box catalog。HashiCorp’s Atlas 有一个公共的目录来免费提供boxes,也提供搜索。
In addition to finding free boxes, HashiCorp’s Atlas lets you host your own boxes, as well as private boxes if you intend on creating boxes for your own organization.
为了找到免费的boxes,HashiCorp’s Atlas也提供私有的boxes服务。
Up 和 SSH
是时候启动你的Vagrant环境了。运行如下命令:
|
|
不到一分钟,这命令会运行完成,你会得到一个ubuntu系统的机器。你将看不到任何东西,因为Vagrant运行的虚拟机没有UI。为了使用终端你可以使用SSH进入这个机器:
|
|
这命令会让你通过SSH登录。现在你可以随意输入命令交互一下或者做一点你想做的事。虽然看起来很诱人,但是小心别使用了rm -rf /
, 因为Vagrant共享目录是/vagrant
,对应是机器上的Vagrantfile目录,它能删除掉所有的这些文件。共享文件夹会在下一节说明。
当你不在使用这个机器的时候,你可以使用vagrant destroy
来删除掉虚拟机。
同步文件夹
现在创建一个虚拟机太方便了,大多数人不想编辑文件是使用通过终端SSH来进行编辑。Vagrant可以进行文件夹共享。使用同步文件夹,Vagrant会自动同步你的文件。
默认的,Vagrant共享你的项目目录(记住,就是Vagrantfile所在的目录)到/vagrant目录。运行vagrant up
然后SSH进行看看:
|
|
Vagrantfile就是你本机的文件,你可以尝试改变它看看:
|
|
看“foo”已经在你的本机了。所以Vagrant保证了文件夹的同步。
使用同步文件夹,你能使用你本地的编辑器编辑文件,然后作用于虚拟机。
准备
好现在我们运行了一个基于Ubuntu镜像的虚拟机,同时我们可以在我们本地编辑文件同步到虚拟机上。接下来我们搭建一个web server。
我们现在只能使用SSH进入,然后安装一个web Server。这样比较麻烦,如果每个人都需要Web Server他都得重复操作。当你启动的Vagrant的时候,Vagrant支持自动安装软件。
安装Apache
我们使用Apache来练习,我们使用Shell脚本来进行。创建下面的脚本,然后保存为bootstrap.sh
放在和Vagrantfile用一个目录。
|
|
Next, we configure Vagrant to run this shell script when setting up our machine. We do this by editing the Vagrantfile, which should now look like this:
接下来我们将在Vagrant中配置这个shell 脚本,以便启动的时候运行。编辑Vagrantfile,内容如下:
|
|
好使用下面命令启动看看
|
|
网络
我们已经有一个运行的Web Server了,同时我们可以在本机上编辑文件。然后,我们访问这个机上的Web Server还必须通过虚拟机的ip来访问。接下来我们学习通过本机访问虚拟机。
PORT FORWARDING
使用端口跳转是一个不错的选择。端口跳转让你可以在本机设置一个端口来访问虚拟机的端口。
好让我们来设置吧:
运行vagrant reload
或者 vagrant up
。待启动完成,
访问http://127.0.0.1:4567
看看效果。
别的网络设置
Vagrant可以设置静态ip地址,详细可以访问网络设置
共享
好了现在我们已经有一个运行的Web Server了,同时也可以通过本机端口访问了。但是对于开发环境来说,我们还需要分享,Vagrant可以很方便的进行分享。这小节主要说的是Vagrant的分享。
Vagrant让你很方便的分享你的环境给任何人。使用URL就可以进行分享了。
登录到 HASHICORP’S ATLAS
Before being able to share your Vagrant environment, you’ll need an account on HashiCorp’s Atlas. Don’t worry, it’s free.
在开始分享Vagrant环境之前,你需要一个HashiCorp’s Atlasd 的账号。别担心,免费的。
一旦你有一个账号,用vagrant login
登录:
|
|
分享
一旦你登录了可以运行vagrant share
:
|
|
你的URL是不一样的,所以对应使用你的URL。把个URL分享出去,当有人需要这个Web Server的时候,他将会很方便。
如果你更新文件然后刷新这个URL,你会发现更新了。很明显这个是通过英特网来连接的你机器环境了。
Vagrant Share is much more powerful than simply HTTP sharing. For more details, see the complete Vagrant Share documentation.
Vagrant的分享有更多功能,不只是简单的HTTP分享。更多细节完整Vagrant分享文档
删除
现在我们知道了所有基于Web开发的虚拟机的功能。但是是时间休息一会了,也许你需要开发另外的一个项目,也许你需要出去玩玩呢,或者下班回家了。那么怎么清除我们的开发环境呢?
使用Vagrant,你可以 suspend,halt 或者 destroy虚拟机。每个命令都有期特点。你需要选择合适的。
Suspending 虚拟机会挂起,它保存了运行时的状态然后停止。当你需要再次运行的适合,只用运行vagrant up
,它将会恢复到你挂起时候之前的状态。这个方式非常的快,通常就是5-10秒钟进行停止或者启动。不好的地方时这个虚拟机还在消耗你的磁盘空间,需要更多的磁盘空间进行保存状态到磁盘的RAM区。
Halting 这个命令将会优雅的关闭虚拟机。你可以在你需要的时候进行启动。这方式的好处是虚拟机会和关机一样停止。在启动就和冷启动一样。
Destroying 消耗虚拟机,清除虚拟机后不会占用你的的硬盘。但是你想再次启动,必须从新下载依赖等等。
重新构建
当你想再次构建你的项目的时候你可以使用如下命令进行:
|
|
这就就会完全的从Vagrantfile中构建出虚拟机环境,这样非常的方便。
提供方式
读到这里,我们项目都是以VirtualBox进行的。但是Vagrant也可以使用其他的提供方式,比如:VMware, AWS等等。接下来我们将了解如何使用它们。
Once you have a provider installed, you don’t need to make any modifications to your Vagrantfile, just vagrant up with the proper provider and Vagrant will do the rest:
一旦你安装了一个提供方式,你不需要再安装别的东西了,对于Vagrantfile来说已经可以了,比如下面的命令:
|
|
使用AWS:
|
|
一旦你使用了别的提供方式,你就不需要再指定提供方式。但是destroy,方式还需要再次指定的。