征服诱人的Vagrant!
一、背景
最近要开始深入学习分布式相关的东西了,那第一步就是在自己的电脑上安装虚拟机,以前在Windows平台,我选择用VMware Workstation作为虚拟机软件,现在在Mac系统下,感觉不是很适合了,然后就有朋友推荐我使用Vagrant来在Mac系统作为虚拟机管理软件,那么本文我们就来聊一聊跟这货相关的蛮有意思的东西。
二、Vagrant介绍
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。我们可以使用它来干如下这些事:
- 建立和删除虚拟机
- 配置虚拟机运行参数
- 管理虚拟机运行状态
- 自动配置和安装开发环境
- 打包和分发虚拟机运行环境
Vagrant的运行,需要依赖某项具体的虚拟化技术,最常见的有VirtualBox以及VMWare两款,早期,Vagrant只支持VirtualBox,后来才加入了VMWare的支持。
为什么我们要选择Vagrant呢?因为它有跨平台、可移动、自动化部署无需人工参与等优点。
在Vagrant体系中,有个box(箱子)的概念,这优点类似于docker体系中的image(镜像)。基于同一个box,不同的人可以运行得到相同的内容。这个我们下文再详细说。
三、Vagrant环境的安装
因为我们知道vagrant依赖virtualbox,所以我们需要在安装vagrant之前先安装virtualbox,笔者初学时在网上搜索了很久,发现大部分人的vagrant教程里只说让安装vagrant并没有说要提前安装virtualbox,结果我按照他们的步骤安装完vagrant以后,发现死活起不来,当时真的是郁闷。后来又查了好久才知道这货依赖虚拟化软件,所以我又安装了virtualbox,这样我本地才把vagrant起来了。真的是坑!这个大家要注意了。
1. 下载并安装virtualbox
下载地址:https://www.virtualbox.org/wiki/Downloads
安装过程很简单,傻瓜式的一步一步点下去。
2.下载并安装vagrant
下载地址:https://www.vagrantup.com/downloads.html
安装过程依旧没什么难的,跟着提示一步一步next。
注意:下载的时候,virtualbox和vagrant的版本要搭配,建议都下载最新版的。还有就是要根据自己的操作系统版本进行选择32位或者64位下载。在windows系统中,可能还需要配置环境变量以及一定要开启VT-x/AMD-V硬件加速。
四、Vagrant基本命令
1. vagrant box基本命令
列出本地环境中所有的box
vagrant box list
添加box到本地vagrant环境
vagrant box add box-name(box-url)
更新本地环境中指定的box
vagrant box update box-name
删除本地环境中指定的box
vagrant box remove box-name
重新打包本地环境中指定的box
vagrant box repackage box-name
在线查找需要的box
2. vagrant基本命令
在空文件夹初始化虚拟机
vagrant init [box-name]
在初始化完的文件夹内启动虚拟机
vagrant up
ssh登录启动的虚拟机
vagrant ssh
挂起启动的虚拟机
vagrant suspend
重启虚拟机
vagrant reload
关闭虚拟机
vagrant halt
查找虚拟机的运行状态
vagrant status
销毁当前虚拟机
vagrant destroy
五、Vagrant高级功能
1. 端口转发
关于端口转发的配置方式有以下两种:
挂起虚拟机后,在virtualbox的设置里配置转发规则(缺点是:每次通过vagrant reload命令重启虚拟机以后失效)
首先打开VirtualBox管理器:
然后设置转发规则:
添加对应的转发规则,然后点击OK保存,再使用命令vagrant up
启动虚拟机。
注意:一定不能使用vagrant reload命令,否则启动后规则丢失无效。
在vagrant的配置文件Vagrantfile里配置转发规则(永久有效,重启不会丢失)
在配置文件里增加以下配置:
config.vm.network :forwarded_port, guest: 80, host: 8889
config.vm.network :forwarded_port, guest: 8888, host: 9999这样的话我们就获得了永久的8889到80、9999到8888的转发。
2. 网络配置
vagrant支持以下三种网络配置:
Forwarded port(端口映射)
是指将宿主计算机的端口映射到虚拟机上的某个端口上,访问宿主计算机的该端口时,请求实际会被转发到虚拟机上指定的端口,配置文件设置语法为:
config.vm.network :forwarded_port, guest: 80, host: 8889
优点:简单、容易理解、容易实现外网访问虚拟机。
缺点:需映射很多端口时较麻烦、不支持在宿主机器上使用小于1024的端口来转发(如:不能使用SSL的443端口来进行https连接)。
官网配置文档地址:https://www.vagrantup.com/docs/networking/forwarded_ports.html
Private network(私有网络)
这种网络配置下,只有主机可以访问虚拟机,如果多个虚拟机设置定在同一个网段也可以相互访问,当然虚拟机也是可以访问外部网络的。配置语法如下:
config.vm.network "private_network", ip: "192.168.50.4" # 固定IP
还可以设置动态IP,配置语法如下:
config.vm.network "private_network", type: "dhcp"
优点:安全,只能自己访问。
缺点:因私有原有,所以其他团队成员不能和你协作。
官网配置文档地址:https://www.vagrantup.com/docs/networking/private_network.html
Public network(公有网络)
这种配置下,虚拟机享受实体机一样的待遇,一样的网络配置,vagrant 1.3版本以后这种配置也支持设定固定IP,配置语法如下:
config.vm.network "public_network", ip: "192.168.50.4"
还可以设置桥接网卡,配置语法如下:
config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"
优点:方便团队协作,别人可以访问你的虚拟机。
缺点:需要有网络,有路由器分配IP
官网配置文档地址:https://www.vagrantup.com/docs/networking/public_network.html
3.共享目录
有时候,我们希望虚拟机能和我们的主机共享一些文件夹,这时候在vagrant的配置文件中进行配置来达到共享目录的目的。
vagrant的共享目录类型有:
NFS (适用于Mac OS宿主机), 配置语法:
config.vm.synced_folder "/hostPath", "/guestPath", type: "nfs"
官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/nfs.html
RSync , 配置语法:
config.vm.synced_folder "/hostPath", "/guestPath", type: "rsync"
官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/rsync.html
SMB (适用于Windows宿主机), 配置语法:
config.vm.synced_folder "/hostPath", "/guestPath", type: "smb"
官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/smb.html
VirtualBox
如果你的vagrant使用virtualbox的provider,这是默认的共享目录的类型。这些同步文件夹使用ValualBox共享文件夹系统将文件更改从客户机同步到主机,反之亦然。
官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/virtualbox.html
注意:配置完成,我们重新启动虚拟机时发现报错了,这时候别慌,我们给出解决办法传送门。
4. 虚拟机优化
自定义虚拟机名称
config.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu-hafiz"
end自定义虚拟机主机名称
config.vm.hostname="hafiz"
自定义虚拟机内存和CPU
config.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu-imooc"
vb.memory = "1024"
vb.cpus = 2
end配置好后重启虚拟机,然后进入虚拟机:
使用
top
命令然后再按1显示当前CPU个数:
使用free -m
命令显示当前虚拟机内存:
5. 打包分发
当我们基于一个box启动一个虚拟机以后,我们在里面部署了专属自己的环境,那这个时候我们想要把自己的这套配置好的环境共享给别人怎么办呢?答案是将虚拟机打包分发。命令如下:
vagrant package [--output new_box_name]
新生成的box名称是选填的,默认为package.box。
六、总结
通过本文,我们对vagrant有了一个大概的了解,那么用起来也会很顺手,用到一个东西,我们还是要追求知其然知其所以然,这样对我们自己负责,同时遇见问题我们也好下手去思考和解决。我就是我,不一样的烟火~
征服诱人的Vagrant!的更多相关文章
- [转帖]征服诱人的Vagrant!
征服诱人的Vagrant! https://www.cnblogs.com/hafiz/ 一.背景 最近要开始深入学习分布式相关的东西了,那第一步就是在自己的电脑上安装虚拟机,以前在Windows ...
- vagrant虚拟化之多网卡网络配置
vagrant虚拟化之多网卡网络配置 一.network改为public 二.查看本地主机网络的ip地址范围(最佳解决方案) 三.vagrant优秀博文 vagrant虚拟化之多网卡网络配置,通过am ...
- Vagrant 基础全面解析
这篇 Vagrant 入门文章将带你创建一个 Vagrant 项目,这个过程将会用到 Vagrant 所提供的主要基本特性.如果想了解 Vagrant 能为你带来哪些好处,可以阅读 Vagrant 官 ...
- Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)
Vagrant(官网.github)是一款构建虚拟开发环境的工具,支持 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念类似于 Docker(实质是不同的),你可以把它看 ...
- 使用packer制作vagrant centos box
使用packer制作vagrant box:centos 制作vagrant box,网上有教程,可以自己step by step的操作.不过直接使用虚拟在VirtualBox中制作vagrant b ...
- vagrant 1.8.6 安装过程及总结遇到的坑
下面先总结遇到的问题,这些问题如果你也遇到,可能需要搜索很多次才能找到原因. 如果想看安装过程,可以先直接跳到后面第二部分部分. 1 问题汇总: 1.1 vagrant版本过高问题. vagrant ...
- 快速打造跨平台开发环境 vagrant + virtualbox + box
工欲善其事必先利其器,开发环境 和 开发工具 就是 我们开发人员的剑,所以我们需要一个快并且好用的剑 刚开始做开发的时候的都是把开发环境 配置在 自己的电脑上,随着后面我们接触的东西越来越多,慢慢的电 ...
- Vagrant基础简要记录
Vagrant是一种开源软件,它为跨众多操作系统构建可重复的开发环境提供了一种方法.Vagrant使用提供者(provider)来启动隔离的虚拟环境.默认的提供者是Virtualbox Vagrant ...
- Mac OSX+VirtualBox+Vagrant+CentOS初体验
1.安装VirtualBox VirtualBox下载地址 免费小巧非常适用,根据自己机器系统选择下载包 VirtualBox 安装包 2.安装并使用Vagrant 1)Vagrant下载地址 选择下 ...
随机推荐
- 通俗易懂--岭回归(L2)、lasso回归(L1)、ElasticNet讲解(算法+案例)
1.L2正则化(岭回归) 1.1问题 想要理解什么是正则化,首先我们先来了解上图的方程式.当训练的特征和数据很少时,往往会造成欠拟合的情况,对应的是左边的坐标:而我们想要达到的目的往往是中间的坐标,适 ...
- XBee® ZigBee 模块使用方法
Digi的ZigBee模块简称S2,根据芯片版本的不同历史上分别有S2,S2B,S2C等,每次硬件平台升级,都会引入一个新的尾缀字母.历史版本中S2和S2B已经停产并被S2C替代.当前S2C是主流平台 ...
- springIOplatform
因此Spring IO Platform应运而生,只要项目中引入了它,外部集成时依赖关系无需版本号 <dependency> <groupId>org.springframew ...
- Pyinstaller打包django
偶有特殊要求可能需要将django程序打包成exe可执行文件,方便在电脑直接点击运行.这里用的是打包python代码的常用库Pyinstaller. 虽然用Pyinstaller支持打包Django, ...
- 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...
- fiddler抓包工具总结
Fiddler 抓包工具总结 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也 ...
- 转发对python装饰器的理解
[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考 原文 http://blog.csdn.net/sxw3718401/article/details/3951958 ...
- Centos7配置hadoop伪分布式
修改hostname(可选) 通过下面命令查看hostname信息 hostnamectl 通过下面命令修改hostname hostnamectl set-hostname gy01 如图所示 下面 ...
- web网站在不同设备下进行缩放
<script> function calculatescale() { var phoneWidth = parseInt(window.screen.width); var phone ...
- repo跟svn的区别
Git与SVN区别 Git和SVN正好相反,git提倡开发时拉分支,各干各的,相互独立,发版本时打标签:而svn呢,平时大家都在主干上干活,发版本时拉个分支,所以呢,svn经常会提交冲突,经常要合并代 ...