Vagrant 入门
Vagrant 入门部分将会引导创建第一个Vagrant程序,还会介绍Vagrant提供的主要基本功能。这里的虚拟机将会采用VirtualBox,因为他是免费的并且对于任何一个操作系统来说都有相应的程序。并且还内置了Vagrant。虽然使用VirtualBox介绍的,但是Vagrant可以工作在任何平台上。在开始介绍之前,请先安装最新版本的Vagrant,因为我们会用VirtualBox作为虚拟机,也得安装VirtualBox
启动和运行
$ vagrant init hashicorp/precise64
$ vagrant up
运行完上面的2个命令后,Ubuntu 12.04 LTS 64-bit 在VirtualBox中的虚拟机就会自动运行,可以用vagrant ssh命令连接到这个虚拟机中。当用完了后可以用 Vagrant destroy命令来终止虚拟机。现在可以想想一下你工作的所有项目都可以这么简单的创建起来。只需要输入Vagrant up 命令就可以安装项目所需要的安装包、网络设置和同步设置。就像在你自己电脑上一样舒适的工作。接下来将会介绍如何创建一个包含Vagrant大部分功能的完整项目。
项目设置
创建Vagrant项目的第一步是创建Vagrantfile。创建Vagrantfile的目的主要有2个
1、标记项目的主目录。很多Vagrant的配置都是和主目录关联的
2、描述项目运行所需要的设备和资源,比如需要安装什么样的软件,如何获取这些软件。
Vagrant有内置的命令vagrant init 来为文件夹创建Vagrantfile。可以在终端中输入如下的命令来练习。
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant init
第一条命令的意思是创建一个文件夹 vagrant_getting_started,第二条命令的意思是进入到刚创建的目录中,第三条Vagrant init 将会在文件夹中创建一个Vagrantfile文件。可以打开看一下vagrantfile文件,这个文件的内容基本上就是备注和示例。虽然看起来很吓人,一会就知道怎么改了。
你也可以在现有的目录中,运行Vagrant init命令创建一个项目。Vagrantfile的主要目的是版本控制。这样其他做这个项目的人就不用做一些前期的工作了。
盒子
Vagrant用镜像来快速的创建虚拟机,避免了从头开始创建的速度的缓慢。这些基本的镜像被称为盒子(“boxes”),基本上指定盒子,是创建完vagrantfile的第一步工作。
安装盒子
如果之前已经运行过 vagrant init hashicorp/precise64的命令就没有必要运行下面的命令。当然,如果想了解Box如何被管理的,看看下面这部分还是有必要的。
添加Box到Vagrant中需要使用Vagrant box add命令。这个命令的作用是给box定义出另外一个名字,这样在其他的地方就可以重复使用了。如果还没有添加box可以利用下面的命令添加。
$ vagrant box add hashicorp/precise64
这个命令将会从atlas.hashicorp.com/boxes/search下载一个名为"hashicorp/precise64"的box.不仅可以从atlas.hashicorp.com/boxes/search添加box,还可以从本地,和远程添加。Boxes为当前用户全局存储。每个项目都会用一个Box作为初始clone,并且不会修改这个原始的镜像。这就意味着如果有2个项目都是用 "hashicorp/precise64"的box
给其中一个添加文件,并不会影响另外一个项目。
从上面的命令可以看出atlas.hashicorp.com/boxes/search下的box命名都是有规律的。他的命名都是有2部分组成,一部分是用户名另外一部分是box的的名字。以hashicorp/precise64来说,hashicorp是用户名,precise64是box的名字。也可以通过URL和本地来指定box,这里就不介绍了。
启动和SSH
在终端输入如下命令就可以启动Vagrant
$ vagrant up
不用一分钟的时间,虚拟机就会运行起来。虽然你看不到什么实质性的东西,这主要是因为Vagrant不是通过用户截面来运行虚拟机的。为了查看虚拟机是否运行起来可以使用下面的命令来连接到虚拟机
$ vagrant ssh
这个命令将会创建一个SSH会话。在这里就可以和正常的机器一样运行了。可以通过输入CTRL+D命令来终止SSH.当运行完了后,可以用Vagrant destroy命令来释放Vagrant占用的资源.vagrant destroy并没有真正的删除box文件,如果想删除可以用vagrant box remove命令删除
同步文件夹
这么简单的几句命令就可以创建运行虚拟机是一件非常cool的事情,但是有很多人都不喜欢在控制台状态用编辑器对文本进行编辑。很幸运的是Vagrant不是必须这样。只要用Vagrant 同步文件夹就可以自动的同步虚拟机中的文件。
默认情况下,Vagrant共享主机中的目录文件到虚拟机的/vagrant目录下。当用vagrant ssh连接到虚拟机时,实际上是进入了/home/vagrant的目录。/home/vagrant目录同/vagrant目录是不一样的。如果你的终端显示了一个不兼容插件的错误,你需要更新box或者选择一个不同的box.不管你信不信,在虚拟机中的Vagrantfile和主机上的vagrantfile是一样的。不信可以运行一下touch命令看一下。
储备
前面介绍了如果创建和同步vagrant。下面让我们用创建Webserver的方式来说明问题。
我们可以在自己的电脑上创建一个webserver然后用SSH连接,但是这样存在一个问题,其他所有用vagrant的人都必须自己安装一遍webserver。Vagrant提供了内建的命令来解决这个问题。用这个命令vagrant可以自动的安装软件。
安装Apache
我们将会用脚本创建一个Apache为项目,把这个脚本命名为bootstrap.sh,并把他保存到同vagrantfile同一个目录中。
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi
下一步我们就可以配置Vagrant让他运行这个脚本。主要通过编辑vagrantfile来实现。
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.provision :shell, path: "bootstrap.sh"
end
config.vm.provision是新添加的,它主要是告诉Vagrant运行什么脚本。 其中shell主要是shell来运行脚本bootstrap.sh,path主要是指项目的主目录,也就是vagrantfile所在的目录。
所有的都配置好了后,运行vagrant up命令。vagrant就会自动的运行脚本。在终端你还可以看见脚本的运行情况。如果vagrant已经运行了,可以用vagrant reload --provision命令来运行。他将会重启虚拟机,跳过初始引导的步骤。--provision表明Vagrant需要运行。
Vagrant安装完成后,Web Server就会运行,但是用浏览器没法查看。但是可以通过加载一个文件来看看。
$ vagrant ssh
...
vagrant@precise64:~$ wget -qO- 127.0.0.1
这主要是因为我们安装的Apache设置文件的根目录为/vagrant,也就是默认的同步文件目录。
网络
端口映射
端口映射允许指定一个客户机的端口映射到主机的一个端口上。可以就可以在自己的主机连接这个端口了。让我们设置一个转发端口,这样就可以连接Apache服务器了。
如下编辑vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/precise64"
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.network :forwarded_port, guest: 80, host: 4567
end
运行vagrant reload或者vagrant up命令。一旦机器运行起来就可以通过http://127.0.0.1:4567来分访问web server了
共享
现在我们已经让Web server运行起来了,并且能够访问。有了一定功能的开发环境。除了提供一个开发环境,Vagrant还能共享你创建的环境。这个共享你创建环境的功能叫做Vagrant共享。Vagrant共享能够让你创建的环境被任何一个可以上网的人访问到。他会创建一个可以让别的机器访问你的Vagrant环境的URL
登录Hashicorp的ATLAS
在开始共享你的Vagrant环境之前,需要创建一个Hashicorp的ATLAS的账户。不用担心,这是免费的。创建好了后,就用Vagrant login登录上去
$ vagrant login
Username or Email: mitchellh
Password (will be hidden):
You are now logged in!
共享
登录上去之后就可以用vagrant share命令
$ vagrant share
...
==> default: Your Vagrant Share is running!
==> default: URL: http://frosty-weasel-0857.vagrantshare.com
...
这里的URL对于不同的用户是不同的。复制你自己的URL地址到浏览器中。将会看到我们之前创建的Apache环境
当你修改共享文件更新URL,你会看见他自动更新。如果想要终止共享服务可以运行CTRL+C命令。
可以重新刷新URL地址,可以看到这时候就没有共享了。
卸载
我们已经创建了一个可以进行Web开发的的虚拟机。现在让我们转换一种方式,比如转到另外一个项目,比如说去干别的事情。我们如何清除开发环境呢。我们可以用Vagrant的suspend,halt,destroy命,每个命令都有利弊。选择一个最适合你的命令
挂起
Vagrant suspend命令将会挂起虚拟机,同事会保存虚拟机当前的状态并且终止。如果又想启用虚拟机,只需要运行vagrant up 命令就行了。它将会回复你当时挂起时候的状态。这个命令的好处是快,只需要5-10秒的时间就可以启动和终止服务。缺点就是需要占用硬盘空间,弄不好还需要更多的硬盘空间来保存虚拟机内存的状态。
停止
Vagrant halt 命令将会关闭虚拟机系统,关闭虚拟机的电源。如果重新需要,只需要运行Vagrant up命令。这个命令的优点是完全终止虚拟机,启动的时候,完全重新启动。缺点就是启动的时候太慢,当然也占用硬盘空间。
销毁
Vagrant Destroy命令将会把虚拟机的所有信息从系统中删除。它将会终止虚拟机,关闭他的电源,删除所有的虚拟机空间。当需要重新启动的时候只需要运行Vagrant up命令。这个的优点是,不占用主机空间,缺点是启动时候需要额外的时间来重新引导虚拟机。
虚拟机
在这个入门部分,虚拟机采用的是VirtualBox。但是Vagrant可以采用各种各样的虚拟机程序,比如说:vMware,AWS等等。一旦安装了虚拟机程序。Vagrantfile不需要做任何修改。只需要运行Vagrant up命令设置正确的虚拟机,就可以了。
$ vagrant up --provider=vmware_fusion
准备好把他移动到云计算上吗?
$ vagrant up --provider=aws
只要运行Vagrant up命令,Vagrant就可以自动的检测到所采用的虚拟机程序。其他的命令该怎么运行还是怎么运行。