为什么要用到这个技术?
简单来说,vagrant是一个操作虚拟机的工具。
它提供了一套高效而便利的虚拟机管理方式,通过命令和配置文件,当然也要基于vagrant自身的约定,就能很快的完成一套开发环境的部署,并可以打包传播,极大的方便了在工作环境中,各个开发环境不一致的问题,也解决了重复配置环境的浪费
技术原理
主要流程就是读取Vagrantfile配置文件里指定的变量,然后进行转换调用虚拟机软件(virtualbox等)的api为用户创建好运行环境
实战
官网地址
快速开始
实战博客来自
排坑历程
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 销毁当前虚拟机,不需要的虚拟机最好销毁,释放存储空间
未完待续...
标签:实战,box,hyper,虚拟机,vagrant,vm,config From: https://www.cnblogs.com/bibibao/p/17642240.html