5

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;

六、参考文献


一个小白
200 声望4 粉丝

引用和评论

0 条评论