Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vagrant 基本使用操作

Vagrant 基本使用操作

作者头像
全栈程序员站长
发布于 2022-11-17 01:41:23
发布于 2022-11-17 01:41:23
80500
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

Others

Vagrant 基本使用操作

Vagrant 是什么?

Vagrant 是一款支持自动化虚拟机暗转、可配置流程的用于管理虚拟机的软件. 主要的优势在于可以提供一个可配置、可移植和复用的虚拟机环境 (通过定义 Vagrantfile , 类似 Dockerfile ), 并且可以使用 shell、chef、puppet 等工具进行部署. 这里要注意, Vagrant 并不能单独使用, 必须要在自己的电脑里安装额外的虚拟机软件, 比如常见的虚拟机软件有: VirtualBox、VMWare 等.

Vagrant 安装

备注: 我安装的是 2.2.6 版本的 Vagrant , 与 6.0 版本之后的 VirtualBox 并不兼容, 所以安装的是 5.2 版本的 VirtualBox , 大家稍微注意一下~

Vagrant 快速上手安装 CentOS

这里通过 centos 7 来做个例子, 来快速安装一个 centos 7 的虚拟机.

首先可以通过 Vagrant Cloud 网站去查找需要的镜像, 展示出来的标题就是 box 名称, 比如 centos/7 就是一个 box (可以简单理解为镜像);

新建一个目录 (比如: ~/virtual-os/centos7/) , 然后执行如下命令在当前目录初始化一个 Vagrantfile 配置文件.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant init centos/7

执行如下命令, 启动虚拟机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant up

在这一步的执行过程中, 若本地没有配置镜像的额外地址, 则会到 Vagrant Cloud 中去下载 box , 但是由于 Vagrant Cloud 在海外, 所以速度会比较慢. 可以在网上找到对应的镜像下载到本地, 再添加 box 的配置中去, 比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant box add --name=’centos/7{ 
     mirrot_local_path}

通过如下 status 命令可以查看当前虚拟机状态 (running 表示正在运行)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant status

虚拟机启动完成之后, 通过如下命令 ssh 登陆到虚拟机中 (默认的用户名和密码都是 vagrant)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant ssh

通过执行 halt 命令关闭虚拟机, destroy 命令销毁虚拟机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant halt
vagrant destory

Vagrant 基本命令小结

上一部分其实我们已经把基本命令都操作了一遍了, 对于基本使用已经足够了, 这里来个汇总

command

description

vagrant init centos/7

在当前目录初始化 Vagrantfile 文件

vagrant box add –name=centos/7 {local_path}

添加一个指定name的镜像获取路径(也可以是镜像获取URL)

vagrant up

根据当前路径 Vagrantfile 配置启动虚拟机

vagrant status

获取当前虚拟机的启动状态

vagrant ssh

ssh 连接到当前虚拟机

vagrant halt

关闭当前虚拟机

vagrant reload

重启当前虚拟机

vagrant destory

删除当前虚拟机

vagrant provision

执行 Vagrantfile 中配置的 provision 操作指令

Vagrantfile 配置文件

常用相关配置说明

Vagrantfile 就相当于是启动虚拟机的配置文件, 常见的配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# 定义 box 名称, 与 init 时指定的名称一致
config.vm.box = "centos/7"
# 定义虚拟机名字
config.vm.hostname = "vagrant"
# 定义 box 镜像位置, 默认不需要指定
config.vm.box_url = "{filepath}"
# 将主机共享的目录挂载到虚拟机中
config.vm.synced_folder "/path/to/share/host", "path/to/mount/vm"
# 设置虚拟机的网络模式
# 此处指定为映射关系, 将虚拟机的 80 端口映射到主机的 8080 端口上
config.vm.network "forwarded_port", guest: 80, host: 8080
# 启动时执行 shell 命令(后面单独讲)
config.vm.provision "shell", inline: "echo hello provisio."
# 设置默认 ssh 用户(默认为 vagrant)
config.ssh.username = "vagrant"
# 设置默认 ssh 密码(默认为 vagrant)
config.ssh.password = "vagrant"
# 设置 ssh 的端口
config.ssh.port = 22
# 指定基于 virtualbox 的一些配置(资源相关)
config.vm.provider "virtualbox" do |v|
v.gui = false       # 启动时, 不显示 virtualbox 的GUI界面
v.name = "my_vn"    # virtualbox 中虚拟机的名字
v.cpus = 2          # 指定虚拟机的CPU核数
v.memory = "1024"   # 指定虚拟机的内存, 单位为 Mb
end
end

虚拟网络配置说明

Vagrantfile 里面我比较感兴趣的就是网络模式的设置, 也就是 config.vm.network 的设置, 这里需要首先说明一下 Vagrant 支持的几种网络模式的区别:

  • NAT 模式 (默认) NAT (Network Address Translation), 网络地址转换. Guest 访问网络的所有数据都是由主机提供的, Guest 并不真实存在于网络中, 主机与网络中的任何机器都不能查看和访问到 Guest 的存在. 所以只能 Guest 单向访问 Host , Host 和网络中的其他机器无法访问到 Guest . 就拿上面的例子来讲, Guest 是能够 ping 通主机, 但是主机是 ping 不通 Guest 的.
  • Bridged Adapter 网桥模式 通过主机网卡, 架设了一条桥连入到网络中. 因此, Guest 能被分配到一个网络中独立的 IP , 所有网络功能和真实机器是一样的. 在网桥模式下的虚拟机, 可以认为是真实的计算机, 和主机是可以相互 ping 通的, 并且与网络中的其他主机也是可以相互访问的.
  • Host-only 模式 该模式下只有主机才能访问 Guest, 其他机器都无法访问 Guest, 同样的, Guest 也能访问主机, 只有和宿主机是互通的, 其他机器无法访问.

几种配置方式大致列举一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 映射 guest 端口到主机上
config.vm.network "forwarded_port", guest: 80, host: 8080
# 配置成 host-only 模式, 指定其在私有网络中的 ip
# 不同 Guest 之间可以通过该 ip 互通
config.vm.network "private_network", ip: "192.168.33.10"
# Bridge模式, 也可以指定 ip 或者桥接网卡
config.vm.network "public_network"
config.vm.network "public_network", ip: "10.1.2.61"
config.vm.netword "public_network", bridge: "en0: Wi-Fi (Wireless)"

Provision 配置说明

Provision 是预先设置的一些操作指令, 可实现的功能是在原生镜像的基础上, 进行一些附加的命令操作, 比如: 安装应用、发布程序等等, 只要是能通过 shell 脚本 (不仅限于 shell) 执行的操作.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 比如: 执行打印 hello provision
config.vm.provision "shell", inline: "echo hello provision"

而 Provision 操作指令执行的时机主要有如下几个:

  1. VM 启动时自动执行, 默认任务只执行一次, 第二次启动就不会自动运行了. 如果需要每次启动都自动执行, 则需要设置 run: “always” 属性;
  2. vagrant up 和 vagrant reload 执行时加上 –provision 参数, 则会执行操作;
  3. VM 启动状态时, 执行 vagrant provison 命令执行;

执行顺序的问题, 根据vagrantfile的层次,分为:

  • configure级:它定义在 Vagrant.configure(“2”) 的下一层次,形如: config.vm.provision …
  • vm级:它定义在 config.vm.define “web” do |web| 的下一层次,web.vm.provision …

执行的顺序是: configure级任务 > vm级任务, 比如下面这个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo foo"
config.vm.define "web" do |web|
web.vm.provision "shell", inline: "echo bar"
end
config.vm.provision "shell", inline: "echo baz"
end

执行输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
==> default: "foo"
==> default: "baz"
==> default: "bar"

Provision 执行 shell 脚本文件的配置方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# path 是基于当前 Vagrantfile 的相对路径, 与执行命令的操作是类似的
config.vm.provision "shell", path: "script.sh"
# path 可以使用 http/https 来访问远程脚本
config.vm.provision "shell", path: "https://example.com/provisioner.sh"

Vagrantfile 模拟多台虚拟机

这里就直接看一个配置文件吧, 如果看完前面的说明, 基本也知道这个配置文件是在做啥了~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vagrant.configure("2") do |config|
# 定义应用服务器
config.vm.define :web do |web|
web.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
end
web.vm.box = "centos7"
web.vm.hostname = "web"
web.vm.network :private_network, ip: "11.11.1.1"
end
# 定义DB服务器
config.vm.define :db do |db|
db.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
end
db.vm.box = "centos7"
db.vm.hostname = "db"
db.vm.network :private_network, ip: "11.11.1.2"
end
# 定义缓存服务器
config.vm.define :redis do |redis|
redis.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "redis", "--memory", "512"]
end
redis.vm.box = "centos7"
redis.vm.hostname = "redis"
reids.vm.network :private_network, ip: "11.11.1.2"
end
end

这里定义的虚拟机都是互通的, 这样就可以在单机中模拟分布式机器的情况啦, 感觉如果有同学在学习 k8s 的话, 这种方式应该还是挺轻松的, 通过一个配置文件可以管理多台虚拟机.

参考文献

谢谢网络上各位大佬提供的资料啦, 这个整理也是不容易啊~ vagrant学习笔记 – provision vagrant系列(2):使用Vagrantfile实现集成预安装

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/210001.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Vagrant将您的笔记本电脑刻录到虚拟机
本文介绍了如何使用 Vagrant 在本地开发环境中模拟多客户机环境,以便在开发过程中轻松测试应用程序在客户机环境中的表现。通过使用 Vagrant,可以在一个控制台中模拟多个客户机环境,方便开发人员测试和调试应用程序。同时,Vagrant 还可以与 Ansible 等配置管理工具集成,实现自动化客户机环境部署和配置。
Steve Wang
2018/01/05
1.3K0
k8s 系列教程-Vagrant
vagrant是开源的虚拟机技术,相对于 vmware 而言更轻量级,操作更简便移植性更强,如果我们需要学习k8s或者搭建一些集群的话建议使用 Virtualbox+Vagrant。Vagrant 是创建虚拟机的工具,Virtualbox 是vagrant 管理工具,而且这两个软件是开源的,不需要我去付费或者破解。掌握 Vagrant技术对我们后续学习k8s会有很大的帮助
六个核弹
2022/12/23
8260
使用Vagrant在你的电脑上构建独立的虚拟开发环境
Techeek
2018/01/08
1.3K0
『中级篇』docker网络(23)
PS:本机基本上docker的多虚拟机网络已经完成了,比较简单,毕竟是演示环境,可能有老铁说,为啥设置成了自动获得IP,而不是静态IP,毕竟是学习的环境,我也尝试改成过静态IP但是ping不通,其实我的思路就是先让计算机帮我设置一个自动获取的IP,我可以在他的基础上设置自己的静态ip,这样保证可以用,对于静态IP如何设置我也写一份静态IP的配置吧,跟上边差距不太大。 还有老铁说 我不太习惯用vagrant 我喜欢用docker-machine,这个都无所谓了,其实重点是吧环境搭建起来。
IT架构圈
2018/08/01
3290
『中级篇』docker网络(23)
『中级篇』docker网络(23)
PS:本机基本上docker的多虚拟机网络已经完成了,比较简单,毕竟是演示环境,可能有老铁说,为啥设置成了自动获得IP,而不是静态IP,毕竟是学习的环境,我也尝试改成过静态IP但是ping不通,其实我的思路就是先让计算机帮我设置一个自动获取的IP,我可以在他的基础上设置自己的静态ip,这样保证可以用,对于静态IP如何设置我也写一份静态IP的配置吧,跟上边差距不太大。
IT架构圈
2018/06/28
3580
『中级篇』docker网络(23)
vagrant学习笔记 - Vagrantfile
《vagrant学习笔记 - 入门》中的hello vagrant配置文件,只是最基本的配置,它使用缺省的box配置初始化了一个虚拟机。有时候,我希望对vm做更详尽的配置,比如配置一次创建一组vm,搭建一个mfs的测试环境,他需要一台服务器做mfsmaster,两台服务器做mfs chunk server,一台服务器做metalogger,还有一台服务器做mfs client进行测试。
pollyduan
2019/11/04
1.4K0
Vagrant入门
简单地说,Vagrant让我们可以通过代码的方式快速地、可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox、AWS、Docker等。它使得我们可以一次性地、自动创建多个环境相同的虚拟机,对于软件开发和测试尤其有用。本文我们将以Virtualbox为例,看看Vagrant的基本使用。
全栈程序员站长
2021/11/10
4950
Vagrant详细教程
  VirtualBox 是一个跨平台的虚拟化工具,支持多个操作系统,根据自己的情况选择对应的版本下载即可。
Se7eN_HOU
2022/05/07
1K0
Vagrant详细教程
『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
PS:这个很类似docker的镜像,需要什么找什么镜像,这个是找对应的虚拟机,我选择的virtualbox,等于别人在特定的系统版本下预装了你需要的软件。对于学习开发很好用。
IT架构圈
2018/12/10
3720
Vagrant入门
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。
用户2131907
2019/02/27
9340
DevOps工具介绍连载(10)——Vagrant
原文链接:https://blog.csdn.net/qianghaohao/article/details/80038096
顾翔
2020/02/20
1.2K0
实战篇:一行命令安装Linux系统,超详细的 Vagrant 上手指南
注意:如果是macOS可以通过homebrew直接安装,Windows可以通过下载安装包进行安装。
Lucifer三思而后行
2021/08/17
9890
实战篇:一行命令安装Linux系统,超详细的 Vagrant 上手指南
『中级篇』docker-swarm创建一个多节点集群(43)
docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。源码地址:h
IT架构圈
2018/08/16
2820
『中级篇』docker-swarm创建一个多节点集群(43)
vagrant + virtualbox搭建一个可移动的开发环境
vagrant+virtualbox 的出现,成功的解决了搭建开发环境耗时且不一致的问题
崔哥
2022/05/25
3720
Vagrant搭建集群环境
平时大家可能需要在多机集群中做一些部署测试,下面介绍如何通过vagrant配置一个测试用的集群环境 1. 安装vagrant和virtualbox 自行解决 2. 安装box文件 根据需要下载centos或者ubuntu的vbox镜像,并添加到系统中,例如: vagrant box add alpha xxx.box vagrant box add centos centos.box vagrant box add xxx.box 3. 创建目录并初始化vagrant vagrant init <!-- m
高木工
2019/05/06
1.1K0
笔记:win10上快速搭建容器环境,不需要VM
1.5.1 在Win10上准备centos7 和大家说明一下,我们的目的仅仅是要安装一个centos7,然后在centos7上安装docker 如果搞不定vagrant+virtualbox的方式,也可以直接使用VM搭建一个centos7 或者你可以直接使用一台云服务器,上面安装了centos7 毕竟我们的目的只是为了得到一个centos7的机器,所以不必花太多精力在这个问题上折腾 我上课用的环境是 【 win10 64位 VirtualBox-6.0.12-133076-Win
源码之路
2020/12/01
6120
使用vagrant+virtualbox搭建centos7
这里使用的是win7系统,可能会出现powershell过低的情况,所以需要先检查本机的powershell版本
用户1215919
2021/12/28
3640
使用vagrant搭建验证环境
这周的工作需要在一个独立的kubernetes环境调试功能,自然而然地想到在本机装个虚拟机搭建这个环境。不过有同事推荐我试一下vagrant,久闻Vagrant大名,之前也经常在一些开源项目中看到它,今天花了些时间了解下这个新东西。
jeremyxu
2019/05/06
9400
有了Vagrant,以后就可以不用VirtualBox图形化管理虚拟机了
Vagrant是一个跨平台的虚拟机管理工具,我们以 Deepin 20.2.3 为例,安装和使用 Vagrant。我们在这里所说的 Vagrant 包括 Vagrant 工具本身 和 虚拟引擎工具 VirtualBox。
极客开发者
2022/01/18
1.3K0
windows 安装vagrant reload 失败; No Virtualbox Guest Additions installation found.[通俗易懂]
问题描述:已经安装vagrant-vbguest 插件,且版本为0.30,使用的box 为centos7
全栈程序员站长
2022/07/19
5820
windows 安装vagrant reload 失败; No Virtualbox Guest Additions installation found.[通俗易懂]
相关推荐
使用Vagrant将您的笔记本电脑刻录到虚拟机
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档