Vagrant - 轻量级虚拟化工具简介

深入讲解视频可登陆:https://ke.qq.com/course/1405491

或腾讯课堂搜索:“诗泽园”,找到对应课程

讨论QQ群:44509570(入群请注明来源)

问题描述

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

 

扫描关注公众号:

Vagrant - 轻量级虚拟化工具简介

上一篇:vagrant使用install安装插件失败后,vagrant各种指令无法顺利执行?


下一篇:ssh连接Vagrant