Vagrant简单使用
一、Vagrant介绍
Vagrant是什么
Vagrant 是一款用来构建虚拟开发环境的工具,常适合 php/python/ruby/java 这类语言开发 web 应用。
为什么用它
统一环境
:我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行。“代码在我机子上运行没有问题”这种说辞将成为历史。
节省时间
:重装电脑后直接使用封装好的环境即可,无需重新配置开发环境。而如果让每个开发人员都自己去搭建本地环境,安装虚拟机、下载ISO镜像、选择规格安装创建vm、安装OS、配置环境,会耗费非常多的时间。
创建环境副本
:我们有时候需要向操作系统安装软件,但又怕安装失败对开发环境造成污染最终放弃。有了Vagrant你可以将当前开发环境打包成Box,用这个Box新创建一个Vagrant实例,然后在新实例中进行你想做的人和操作。
几个概念
Provider
:供应商,在这里指Vagrant调用的虚拟化工具。Vagrant本身并没有能力创建虚拟机,它是调用一些虚拟化工具来创建,如VirtualBox、VMWare、Xen、Docker,甚至AWS,这些虚拟化工具只要安装好了,vagrant会自动封装在底层通过统一的命令调用。也就是说使用vagrant时你电脑上还需要安装对应的Provider,默认是免费开源的virtualbox。Box
:可被Vagrant直接使用的虚拟机镜像文件,大小根据内容的不同从200M-2G不等。针对不同的Provider,Box文件的格式是不一样的,从 vagrantcloud.com 你可以找到社区维护的box。Vagrantfile
:Vagrant根据Vagrantfile中的配置来创建虚拟机,是Vagrant的核心。在Vagrantfile文件中你需要指明使用哪个Box(可以下载好的或自己制作,或指定在线的URL地址),虚拟机使用的内存大小和CPU,需要预安装哪些软件,虚拟机的网络配置,与host的共享目录等。Provisioner
:是Vagrant的插件的一种。大部分现成的box并不是你正好想要的,通过使用你熟悉的provisioner,比如Puppet,可以在你使用vagrant up启动虚拟机时自动的安装软件、修改配置等初始化操作。当然你也可以在最先启动虚拟机后,使用vagrant ssh进去然后手动安装软件,但毕竟不是所有人都是系统管理员,写好Vagrantfile后无需人工干预马上就可以使用vm。目前支持并实现的provisioning有Puppet、Salt、Ansible、Chef这些知名的自动化运维工具,当然需要一定的使用经验;也可以使用shell provisioner,故名思议这个插件就是通过执行shell命令完成统一的作用。Guest Additions
:这个是常在下载 base box 介绍里有的,一般用来实现host到vm的端口转发、目录共享,在开发环境上都建议装上以便测试。
启动示意
二、安装步骤
本博客不介绍具体安装细节,请自行搜索安装详细流程。
1、安装VirtualBox
虚拟机还是得依靠 VirtualBox 来搭建,免费小巧,有Mac OS/Windows/Linux版本。
下载地址:https://www.virtualbox.org/wi...
提示:虽然 Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的
2、安装Vagrant
Vagrant支持Max OS、Windows、CentOS以及基于Debian的发行版本Ubuntu
下载地址:https://www.vagrantup.com/dow...
3、下载Box
官方box: https://atlas.hashicorp.com/b... 暂时只看到搜索名称,没法下载
第三方box: http://www.vagrantbox.es/ 提供了各发行版/provider的下载链接,貌似官方的url也有
三、启动步骤
1、添加Box镜像
命令:vagrant box add {box-name} {box-url}
举例:
vagrant box add ubuntuBox ~/Downloads/ubuntu.box //添加本地Box
Box相关命令
查看Box列表:vagrant box list
删除Box:vagrant box remove {box-name}
2、创建一个Vagrant环境
命令:vagrant init {box-name}
举例:
vagrant init ubuntuBox
执行init命令后,会在当前文件夹创建一个Vagrant配置文件Vagrantfile
。
3、启动Vagrant
命令:vagrant up
举例:
注:执行up命令前需先cd到Vagrant目录
vagrant up
执行up命令后,终端会输出一系列启动信息,第一次启动会花费几分钟时间。
4、连接Vagrant
命令:vagrant ssh
举例:
注:Vagrant实例的用户名密码默认都为“vagrant
”
vagrant ssh
执行ssh命令就相当于使用vagrant身份登录实例,你可以对操作系统进行操作,比如安装LNMP环境。
5、配置Vagrant
注:修改完后执行vagrant reload
重启虚拟机生效配置文件。
配置IP
为了在Host机上通过浏览器访问Vagrant虚拟机,需要给虚拟机配置一个IP地址。使用文本编辑器修改Vagrant的Vagrantfile
,如下:
config.vm.network :private_network, ip: "192.168.33.10"
重启虚拟机后就可以在浏览器通过192.168.33.10
就可以访问。
设置共享文件夹
因为我们在Host机上开发,那么编写代码时如果将修改同步到虚拟机实时查看效果呢?我们可以配置共享文件夹来实现,修改Vagrantfile
:
config.vm.synced_folder "/Users/Sam/Code/web/", "/web", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
配置解释:
config.vm.synced_folder host_folder
vagrant_folder
第一个参数是Host机的文件夹路径,如果你填写的是相对路径的话,则文件夹是相对于当前虚拟机目录。
第二个参数是虚拟机的文件夹路径,这个路径必须是绝对路径。
可选参数:
create:Bool值。当Host机目录不存在是,是否自动创建。
group:虚拟机文件夹所属用户组。
owner:虚拟机文件夹所属用户。
disabled:Bool值。是否禁用。
mount_options:挂载参数。
四、常用命令
命令 | 功能 |
---|---|
vagrant init | 初始化虚拟机 |
vagrant up | 启动虚拟机 |
vagrant halt | 关闭虚拟机 |
vagrant reload | 重启虚拟机 |
vagrant ssh | 登录虚拟机 |
vagrant status | 查看虚拟机运行状态 |
vagrant destroy | 销毁虚拟机 |
vagrant box list | 查看本地Box列表 |
vagrant box add | 添加Box |
vagrant box remove | 删除Box |
vagrant package | 打包虚拟机成Box |
五、注意事项
使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:
#Apache 配置(httpd.conf 或者 apache.conf)添加:
EnableSendfile off
#Nginx 配置(nginx.conf)添加:
sendfile off;
六、参考文献
使用 Vagrant 打造跨平台开发环境 https://segmentfault.com/a/11...
使用Vagrant打造统一的开发环境 https://www.zybuluo.com/gabe/...
在 Mac/win7 下上使用 Vagrant 打造本地开发环境 https://segmentfault.com/a/11...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。