目录
Vagrant是一款用来构建虚拟开发环境的外挂工具,可以简化虚拟机配置和管理。它底层支持VirtualBox、VMware、AWS等,非常适合使用php/python/ruby/java语言开发web应用,“代码在我机子上运行没有问题”这种说辞将成为历史。
1. 安装VirtualBox
去官网 https://www.virtualbox.org/wiki/Downloads 下载最新版的Virtualbox,然后双击安装,一直点击确认完成。
2. 安装Vagrant
去官网 https://www.vagrantup.com/downloads.html 下载最新版的Vagrant,然后双击安装,一直点击确认完成。在windows下安装vagrant,为了写入相应配置到环境变量,系统可能会要求重新启动。在命令行中,输入vagrant,查看程序是不是已经运行了。如果不行,请检查一下$PATH里面是否包含vagrant所在的路径
[TOC]
add box的时候默认保存在C盘用户文件夹 C:\Users\xxx.vagrant.d,通过设置VAGRANT_HOME环境变量改变默认位置
WIN
setx VAGRANT_HOME "X:/your/path"
setx VAGRANT_HOME "X:/your/path" /M (系统变量)
Linux
export VAGRANT_HOME='/path/to/vagrant_home'
参考
3. Vagrant命令详解
命令 | 作用 |
---|---|
vagrant box add | 添加box的操作 |
vagrant init | 初始化box的操作,会生成vagrant的配置文件Vagrantfile |
vagrant up | 启动本地环境 |
vagrant ssh | 通过ssh登录本地环境所在虚拟机 |
vagrant halt | 关闭本地环境 |
vagrant suspend | 暂停本地环境 |
vagrant resume | 恢复本地环境 |
vagrant reload | 修改了Vagrantfile后,使之生效(相当于先 halt,再 up) |
vagrant destroy | 彻底移除本地环境 |
vagrant box list | 显示当前已经添加的box列表 |
vagrant box remove | 删除相应的box |
vagrant package | 打包命令,可以把当前的运行的虚拟机环境进行打包 |
vagrant plugin | 用于安装卸载插件 |
vagrant status | 获取当前虚拟机的状态 |
vagrant global-status | 显示当前用户Vagrant的所有环境状态 |
4. 使用Vagrant安装配置虚拟机
4.1 box是什么?
接下来,我们需要选择使用何种操作系统,这里以centos7.2为例。以前基于虚拟机的工作流,我们需要下载ISO镜像,安装系统,设置系统等操作。而Vagrant开源社区提供了许多已经打包好的操作系统,我们称之为box。你可以从box下载地址(下文列出),找到你想要的box,当然你也可以自己制作一个。
- 官方仓库:https://atlas.hashicorp.com/boxes/search
- 官方镜像:https://vagrantcloud.com/boxes/search
- 第三方仓库:http://www.vagrantbox.es/
4.2 如何安装一个box?
我们需要建立自己的开发环境目录:
$ mkdir -p /Users/jackyue/data/vagrant/centos7
$ cd /Users/jackyue/data/vagrant/centos7
Vagrant提供在线安装服务,非常方便,但由于伟大的GFW,我们需要先FQ把box下载到本地,然后导入安装。box链接:https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
以下是导入安装说明:
$ vagrant box add {title} {url}
$ vagrant init {title}
$ vagrant up
vagrant box add是添加box的命令,{title}是以后创建虚拟机的别名,{url}是下载到本地box的路径,也可以是服务器端的URL。
说明:将box镜像添加到本地仓库,有三种方式:
- 使用http绝对地址
vagrant box add precises64 http://files.vagrantup.com/precise64.box
- 使用本地文件(从协议来说,和上面一样,相当于file:///协议的地址)
vagrant box add precises64 ./precise64.box
- 使用仓库名称
vagrant box add precises64 ubuntu/precise64
这种方式,vagrant会自动在*仓库查找镜像,并下载到本地镜像库中。
vagrant box add ubuntu/precise64
省略本地镜像名称,则直接用*仓库中的镜像名作为本地镜像名,这样做的好处是可以跟仓库中的镜像对应。
4.3 安装centos7 box
$ cd /Users/jackyue/data/vagrant/centos7 //找到一个目录,作为初始化目录
$ vagrant box add centos7 /Users/jackyue/data/vagrant/centos/centos-7.0-x86_64.box //建议采取离线安装,这样有利于放置虚拟机文件到指定路径
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7' (v0) for provider:
box: Unpacking necessary files from: file:///Users/jackyue/data/vagrant/vagrant-centos-7.2.box
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!
box中的镜像文件被放到了/Users/jackyue/data/vagrant/.vagrant/machines/之下
4.4初始化镜像
$ vagrant init centos7
//如果是新添加的box,必须执行本步骤,初始化一次之后,就不需要再执行本步骤
A `Vagrantfile` 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会在当前的初始化目录生成一个Vagrantfile配置文件,我们可以修改它,进行个性化定制。在下一篇文章中,我们会具体讲解关于Vagrantfile的配置。对于Vagrantfile文件,我们可以直接编写,或者从网络上拉取Vagrantfile文件后,作为虚拟机配置文件,如下:
$ mkdir -p ~/vm/coreos
$ cd ~/vm/coreos
$ git clone https://github.com/coreos/coreos-vagrant.git
4.5 启动系统
$ vagrant up
// 第一次开启的时候,建议一台一台地开启,这样的话方便记录映射的本地端口号
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos7_default_1493108555390_12825
==> default: Clearing any previously set network interfaces...
4.6 SSH连接安装的虚拟机
经过以上操作后,我们完成了centos7虚拟机的安装,现在需要登录虚拟机,进行操作,有以下三种方式:
在开发环境的目录(有Vagrantfile的地方),登录虚拟机
$ vagrant ssh
- 使用第三方工具,如secureCRT)或系统ssh命令进行登录,IP为Vagrantfile中指定的hostonly地址,用户名与密码默认都是vagrant
- 在宿主机的命令行,ssh到本地端口的方式登录。观察客户机的22端口映射到宿主机的是多少,一般是2200或者2222,用户名与密码默认都是vagrant
$ ssh -p 2222 127.0.0.1
5. 打包分发
当你配置好开发环境后,退出并关闭虚拟机。在终端里,对虚拟机打包
# vagrant halt // 在开发环境的目录,关闭centos7
# vagrant status // 确认centos7关机
# vagrant package centos7 --output centos7.box --vagrantfile Vagrantfile
// --output NAME:(可选)设置通过NAME来指定输出的文件名;--vagrantfile FILE:(可选)将Vagrantfile直接封进box中
注:如果网络模式中使用private_network的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:rm -f /etc/udev/rule.d/70-persistent-net.rules
打包完成后会在当前目录生成一个centos7.box的文件,将这个文件分发给其他用户(开发者)。
其他用户只要添加这个 box ,并用其初始化自己的开发目录,就能得到一个一模一样的开发环境了。
# vagrant box add centos7 centos7.box
//添加package.box,镜像命名为centos7
$ vagrant init centos7
// 初始化centos7镜像
$ vagrant up