开发过程中,环境配置不一致经常导致一些问题,本地运行正常,到测试、生产环境却出现了问题。所以,一套和线上环境配置一致的本地开发环境是很有必要的。在虚拟机中搭建一套和线上环境一致的虚拟环境,能够有些避免类似问题;尤其在团队开发中,一致的开发环境能够减少很多不必要的问题。不过,单纯使用VMware、VirtualBox或者Parallels在做开发环境标准化时有些困难,团队中每个人按照要求在虚拟机中搭建一遍,既费时又费力。Vagrant作为一个虚拟机管理工具,很好的解决了这些问题,基于命令行更轻便的操作虚拟机,实现快速的虚拟机镜像分发和使用,团队中打包一个box,就可以分发给所有人使用。

Vagrant提供的共享文件夹、端口转发等功能,对于在主机上写程序,在虚拟环境中调试来说是非常有用;可以将代码放到共享目录,方便虚拟环境调试,把日志文件放到共享目录,方便主机查看。在模拟分布式环境时,同时配置启动多台虚拟机也非常方便。Vagrant环境的搭建比较简单,可以使用Vagrant+VirtualBox组合,也支持Vagrant+VMware、Parallels这种组合。

安装Vagrant和VirtualBox

推荐使用Vagrant+VirtualBox这个组合,因为Vagrant最早支持VirtualBox,感觉会更靠谱一些;当然,最重要的原因:VMware和Parallels都是付费软件,VirtualBox是开源的。

如果机器已经安装了虚拟机软件,在下载安装Vagrant的时一定注意版本,版本不兼容可能无法使用,建议全部升级到最新版本。官网下载:

双击下载文件,傻瓜式安装;安装完成后,控制台运行vagrant version

出现以为内容,说明安装正常。

Installed Version: 2.0.2 
Latest Version: 2.0.2

You're running an up-to-date version of Vagrant!

在/Users/wangxuesong下创建Vagrant目录,打开官网点击Find Boxes查找需要安装box,搜索Centos,在How to use this box with Vagrant中有两行最简单的命令,在刚才创建的目录中执行这两个命令就可以快速下载并启动一个centos7的虚拟机了:

vagrant init centos/7
vagrant up

由于某些原因下载速度可能比较慢,在执行vagrant up命令后,找到下载链接,类似于这个https://vagrantcloud.com/centos/boxes/7/versions/1801.02/providers/virtualbox.box,放到迅雷之类的工具中下载会快一些。

下载完成后,拷贝到Vagrant目录,执行vagrant box add centos/7 centos-VAGRANTSLASH-7添加box;执行vagrant init完成相关虚拟机的初始化(第一种是直接运行的vagrant init,会先添加box再初始化)。

初始化完成,在Vagrant目录会生成一个Vagrantfile文件,里面可以配置各种虚拟机信息。

执行vagrant up(最初的那两个简单命令之一)启动虚拟机器;

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'centos/7' is up to date...
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Rsyncing folder: /Users/wangxuesong/Vagrant/ => /vagrant

启动完成,执行vagrant ssh登陆虚拟机。

配置Vagrant和VirtualBox

在Vagrant中,生成的Vagrantfile文件,里面包含了各种配置信息。

Vagrant.configure("2") do |config|

config.vm.box = "centos/7"

这两默认配置,代表使用的配置版本为2.x,指定了所使用的box为centos/7。

  • hostname设置

    config.vm.hostname = "centos7"

  • 网络设置
    Vagrant默认为NAT模式,用于让vm可以通过host转发访问局域网甚至互联网;Vagrant还支持host-only(主机模式)和Bridge(桥接模式),因为不需要局域网,一般设置为host-only模式。避免与局域网机器IP冲突,尽量不要使用192.168、10、172.16等ip地址。

    config.vm.network "private_network", ip: "66.66.66.66"

  • 同步目录设置
    从vagrant启动输出信息可以看到,默认设置了同步目录:

    ==> default: Rsyncing folder: /Users/wangxuesong/Vagrant/ => /vagrant

    可以通过配置来设置自定义同步目录。

    config.vm.synced_folder "/Users/wangxuesong/Vagrant_Data", "/vagrant_data"

  • 设置内存、CPU
    调整内存和CPU,找到配置文件靠后部分,将config.vm.provider部分注释去掉。

    config.vm.provider "virtualbox" do |vb|

       vb.memory = "3072"
       vb.cpus = "2"

    end

执行vagrant reload重启生效配置,登陆虚拟机验证配置是否生效。

Vagrant常用命令

  • vagrant up 启动虚拟机
  • vagrant ssh ssh到虚拟机
  • vagrant halt 关闭虚拟机
  • vagrant reload 重启虚拟机
  • vagrant status 查看虚拟机状态
  • vagrant suspend 暂停虚拟机
  • vagrant resume 恢复虚拟机
  • vagrant package 打包当前虚拟机环境
最后修改:2022 年 11 月 15 日
如果觉得我的文章对你有用,请随意赞赏