vagrant实战爬坑

发布时间 2023-08-19 11:39:21作者: bibibao

为什么要用到这个技术?

简单来说,vagrant是一个操作虚拟机的工具。
它提供了一套高效而便利的虚拟机管理方式,通过命令和配置文件,当然也要基于vagrant自身的约定,就能很快的完成一套开发环境的部署,并可以打包传播,极大的方便了在工作环境中,各个开发环境不一致的问题,也解决了重复配置环境的浪费

技术原理

主要流程就是读取Vagrantfile配置文件里指定的变量,然后进行转换调用虚拟机软件(virtualbox等)的api为用户创建好运行环境

实战

官网地址

https://www.vagrantup.com/

快速开始

实战博客来自

排坑历程

VMware

当初使用这个工具是架构师老师的推荐,文档中建议配合使用的虚拟机是virtualbox而我本地电脑上装的是VMware,所以就到官方文档上去搜索VMware相关的配置,然后进行安装。最后发现vagrant连接VMware需要申请证书,所以VMware就要放弃了,最后也把本地的VMware也卸载了,浪费了有一天时间。

hyper-v

hyper-v 是架构师交流群里一位群友推荐的,主要优点是windows自带的虚拟机功能,不用额外下载其他虚拟机,但是下载配合vagrant使用后,发现hyperv并不能很方便的支持vagrant的连接,而且在虚拟机生成之后,通过hyperv自己的控制台工具想要进行本地宿主机和虚拟机之间的拷贝粘贴时,出现了问题,发现根本就不支持,后来在网上博客有人提到,目前hyper-v只支持ubuntu系统的一个工具,而我要装的虚拟机系统是centos,而且我看身边的人以及公司也用的是centos,最后不得不放弃hyperv.

Virtualbox

在VMware卸载后,下载了架构师老师提供的virtual安装包,box也是老师提供的,当时并没有意识到box是根据特定虚拟机版本生成的(中间切换到hyper-v才意识到这个问题),这个box老师已经预装了像Java,rocketmq,zookeeper等相关工具,在配合vagrant生成虚拟机的时候,有一个错误是一直解决不了,老师在博客中的解决方案也是起不了作用,所以才放弃去使用了hyper-v,但是我发现我的电脑并没有所谓的hyper-v,上网搜索才发现,这个工具只有在windows10专业版上才有,而我的电脑版本是家庭版!!!所以又花了15块钱在淘宝上买了一个激活码,最后升级成功,启用了hyper-v,由于不能在宿主机和虚拟机之间完美拷贝数据,所以最终还是回来继续用virtualbox,这次重新一试,之前的问题都解决了,由此我得出结论,一切都是windows系统的问题,作为开发者,一定要将系统版本升级到专业版,不然会很坑!!!

博客链接整理

https://www.cnblogs.com/crazymakercircle/p/14194688.html

相关配置

vagrantfile

(1..3).each do |i|
        config.vm.define vm_name = "cdn#{i}" do |config|
                config.vm.provider "virtualbox" do |v|
                        v.customize ["modifyvm", :id, "--name", vm_name]
                        v.customize ["modifyvm", :id, "--memory", "4096"]
                        v.customize ["modifyvm", :id, "--cpus", "2"]
                end
                config.vm.box = "springcloud-dev"
                config.vm.hostname = vm_name
                config.ssh.username = "vagrant"
                config.ssh.password = "vagrant"
                config.vm.network :private_network, ip: "192.168.56.12#{i}"
                config.vm.provision :shell, :path => "bootstrap.sh"
        end
  end

上面的脚本代码指定了box的名称,provider的版本类型,以及循环生成了3个虚拟机,指定虚拟机核数CPU,内存大小等

bootstrap.sh

echo "Update /etc/hosts"
cat > /etc/hosts <<EOF
127.0.0.1 localhost

192.168.56.121 cdn1
192.168.56.122 cdn2
192.168.56.123 cdn3
EOF

echo "Disable iptables"
setenforce 0 >/dev/null 2>&1 && iptables -F

### Set env ###
echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

改脚本的目的是启动时自己需要运行的脚本,脚本语言是shell。

常用命令

vagrant init 初始化vagrantfile

vagrant add remove 删除 box,add会自动帮你生成vagrantfile

vagrant box remove springcloud-dev

vagrant add box 添加 box,自动帮你生成vagrantfile

vagrant box add  springcloud-dev   /e/virtual/workcluster/springcloud-dev-3.box

vagrant halt 关闭虚拟机

vagrant destroy 销毁虚拟机

vagrant ssh 连接虚拟机

vagrant reload 修改vagarntfile文件后,重启虚拟机,重新加载

vagrant suspend 暂时挂起虚拟机

vagrant status 查看虚拟机运行状态

vagrant package 打包 box文件

vagrant package --base cdh1 --output  springcloud-dev-4.box

vagrant box list 首先查看已经添加的box:

$ vagrant box list
centos (virtualbox, 0)

vagrant destroy 销毁当前虚拟机,不需要的虚拟机最好销毁,释放存储空间

未完待续...