|
问题描述
1、虚拟化工具学习成本高
2、环境无法直接共享
3、虚拟化平台不统一
4、无法快速保存、还原某版本测试环境
解决方案:Vagrant
1、可以很方便的就建立起来一个虚拟环境
2、可以很快速的就把某版本的测试环境还原出来
3、可配置、轻量级、便携式
4、可共享,降低了开发者搭建环境的时间,提高了生产力
5、解决了“在我的机器上可以工作”的问题
6、跨平台,支持多操作系统,多款虚拟化平台
7、模拟分布式系统
8、命令行模式,适合做DevOps(可关注微信公众号:“诗泽园” 获取详细内容)
安装包及Box的选择
安装包:https://www.vagrantup.com/
Boxes: http://www.vagrantbox.es/
Box推荐选择:minimal + guest additions + puppet|chef 的box
基础命令及操作
基础命令:
$ vagrant init # 初始化
$ vagrant up # 启动虚拟机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant suspend # 挂起虚拟机
$ vagrant resume # 唤醒虚拟机
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机
Box管理:
$ vagrant box list # 查看本地box列表
$ vagrant box add # 添加box到列表
$ vagrant box remove # 从box列表移除
一般操作:
1、添加Box:vagrant box add 【name】 box路径
2、初始化:Vagrant init centos7,修改OR替换配置文件
3、启动:Vagrant up
4、登录并使用:Vagrant ssh
Provider的选择
vagrant支持多种类型的虚拟化平台,默认平台为VirtualBox,如果选择其他平台,需要加以下参数:
$ vagrant up --provider hyperv
网络设置
Vagrant可以指定三种网络,他们和多数虚拟机提供的网络是对应的。
- 端口转发(Forwarded Ports)
- 私有网络(Private Network)
- 公有网络(Public Network)
三种网络类型分别由NAT、桥接、内部、主机模式组合而成,视频中会做具体讲解,这里由于篇幅关系就不再累述。(可关注微信公众号:“诗泽园” 获取详细内容)
端口转发(Forwarded Ports)
config.vm.network :forwarded_port, guest: 80, host: 8080
将虚拟机的端口80映射为宿主机的端口8080
优点:
简单易理解
容易实现外网访问虚拟机
缺点:
如果一两个端口需要映射很容易,但是如果有有很多端口,比如MySQL,MongoDB,tomcat等服务,端口比较多时,就比较麻烦。容易占用端口。
私有网络(Private Network)
config.vm.network "private_network", ip: "192.168.50.4"
config.vm.network "private_network", type: "dhcp"
只有主机可以访问虚拟机,如果多个虚拟机设定在同一个网段也可以互相访问,当然虚拟机是可以访问外部网络的。
优点:
安全,只有自己能访问。
缺点:
因为私有的原因,所以团队成员其他人不能和你协作。(可关注微信公众号:“诗泽园” 获取详细内容)
公有网络(Public Network)
config.vm.network "public_network", ip: "192.168.1.120"
config.vm.network "public_network" (默认使用dhcp分配)
虚拟机享受实体机器一样的待遇,一样的网络配置。
优点:
方便团队协作,别人可以访问你的虚拟机。
缺点:
需要有网络,有路由器分配IP。
如果Host机器有多张网卡,此时运行vagrant up, Vagrant会询问需要使用那张网卡连接到网络,如果不想要这种交互,则可以在Vagrantfile中进行配置,语法如下:
config.vm.network "public_network", :bridge => 'en1: Wi-Fi (DLINK)'
Provision
--provision / --no-provision
什么时候会执行:
首次执行vagrant up
执行vagrant provision
执行vagrant reload –provision
也可以做配置使之每次执行:
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo hello",
run: "always"
end
两种执行方式:
1、直接在Vagrantfile中编写Shell脚本,可以通过“inline”指定脚本内容:
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "shell", inline: "echo hello"
end
2、 通过引用外部脚本文件的方式:
Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "script.sh"
end
Package
打包共享自制的box:
vagrant package –-base virtualbox_vm_name --output newbox_name.box
|
|