老陈杂谈:浅谈Vagrant使用经验

发布于 2020年8月    阅读 46次

关于Vagrant在实际开发中是如何使用的,说句实际话,实际开发中,老陈就没用过Vagrant。倒是自己撸项目时经常用到,无他,实在是Vagrant+Docker用起来太方便了。

为什么不直接用Docker?这个是有原因的,Mac用户都懂。Docker For Mac实在是难堪大用。或者换个说法吧,Docker For Mac是给大佬用的,小佬跟中佬还是老老实实用Vagrant+Docker,这样节省了走弯路的时间。再者,在老陈印象中,有大佬说过,中间件不要用Docker。

这点老陈我印象深刻,毕竟老陈就在Docker For Mac上面踩了RocketMQ的坑。最后还是老老实实在本机跑RocketMQ。当然了,如果是Windows用户,用Docker For Windows或许会好一些,老陈观网上一大堆教程,用Docker For Windows搭建RocketMQ或者Elasticsearch环境的,好像一切顺利没出事。

老陈自己亲身体验,使用Vagrant+Docker,搭建Redis、MongoDB、FastDFS,Redis跟MongoDB倒还好,FastDFS还是有一点点问题的,图片可以上传,也能够访问到,就是删除不了。

刚刚说到了Vagrant+Docker的一点点使用体验。Docker就无需赘述,百度一下就知道是个啥玩意。

这篇文章主要讲Vagrant。

简单来讲,Vagrant是一个用于创建和部署虚拟化开发环境的工具,是需要跟虚拟机搭配使用的。比方说跟VirtualBox搭配使用。网上的Vagrant教程,使用VirtualBox的最多。

如果是Mac用户,也可以使用PD虚拟机,老陈就是用PD的,跟VirtualBox相比,网上教程少,有些坑要踩一踩。老陈不建议使用VMware,当然,钱多得没处花的话,也可以用VMware。

首先,使用Vagrant的第一步,鉴于国情特殊,需要先学会下载镜像。下载镜像这一步很重要,需要好好学一学。慕课网有一篇手记,有说到如何下载镜像,参考下学一学,https://www.imooc.com/article/72419 根据上面这篇手记,下载VirtualBox的CentOS 镜像,只需访问链接,https://app.vagrantup.com/centos/boxes/7/versions/1804.02/providers/virtualbox.box 就可以开始下载。

下载完镜像之后,按如下操作添加带版本号的镜像。新建metadata.json,添加如下内容:

{
   "name": "centos/7",
   "versions": [{
       "version": "1804.02",
       "providers": [{
           "name": "virtualbox",
           "url": "file://D:/virtualbox.box"
      }]
  }]
}

执行:vagrant box add metadata.json在这里需要对上面步骤进行详细点的讲解。在新建metadata.json之前,先新建一个名叫“dev”或者叫啥都行只要自己能记住名字的目录。

在该目录下,比方说在dev目录,新建metadata.json。metadata.json里面的“providers”字段对应的数组对象里面,“name”是镜像对应的虚拟机类型,比方说virtualbox。“url”是镜像的路径,“file://D:/virtualbox.box”,这个是Windows系统的镜像路径,根据实际情况填写路径就行。cd 到dev目录下,执行“vagrant box add metadata.json”。

如此操作之后,就成功添加镜像了。

添加镜像之后,还有个坑要填一填,还需要安装插件。

用的是VirtualBox的话,需要安装vagrant-vbguest插件:

vagrant plugin install vagrant-vbguest

如果用的是PD虚拟机,则需要安装vagrant-parallels插件:

vagrant plugin install vagrant-parallels

接下来还有一个比较重要的步骤,关于Vagrantfile的。在使用Vagrant之前,需要先建立一个目录,比方说叫做vagrant_redis,这样一看就明白,这是安装Redis环境用的。cd到这样一个目录里面,执行命令“vagrant init”,就会自动生成Vagrantfile。Vagrantfile的内容需要自己更改。比方说老陈用的是:

Vagrant.require_version ">= 1.6.0"

boxes = [
  {
      :name => "Ubuntu-16.04",
      :eth1 => "192.168.205.10",
      :mem => "4096",
      :cpu => "2"
  }
]
Vagrant.configure(2) do |config|
config.vm.box_check_update = false
config.vm.box = "ubuntu-16.04"
config.vm.box_version = "201912.04.0"
boxes.each do |opts|
  config.vm.define opts[:name] do |config|
    config.vm.hostname = opts[:name]
    config.vm.provider "parallels" do |vb|
      vb.memory = opts[:mem]
      vb.cpus = opts[:cpu]
    end
    config.vm.network :private_network, ip: opts[:eth1]
    #config.vm.network :public_network, ip: opts[:eth1]
  end
end
config.vm.synced_folder ".", "/vagrant"
#主机的端口访问虚拟机的端口
# for Redis
config.vm.network "forwarded_port", guest: 6379, host: 6379
# for MongoDB
config.vm.network "forwarded_port", guest: 27017, host: 27017
#for FastDFS
config.vm.network "forwarded_port", guest: 22122, host: 22122
end

上面这份Vagrantfile仅供参考,老陈用的PD虚拟机跟Ubuntu镜像,用PD虚拟机是个人喜好,用Ubuntu是Ubuntu跟Docker搭配更好使用。

具体的Vagrant如何使用,网上大把教程,老陈就不再赘述。毕竟这篇文章讲的是使用经验,不是使用教程。作为程序员,必须学会自己走路。