Vagrant 基本使用操作

Vagrant 基本使用操作OthersVagrant基本使用操作Vagrant是什么?Vagrant安装Vagrant快速上手安装CentOSVagrant基本命令小结Vagrantfile文件Vagrant基本使用操作Vagrant是什么?Vagrant是一款支持自动化虚拟机暗转、可配置流程的用于管理虚拟机的软件.主要的优势在于可以提供一个可配置、可移植和复用的虚拟机环境(通过定义Vagr…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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 的虚拟机.

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

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

    vagrant init centos/7
    

    Jetbrains全家桶1年46,售后保障稳定

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

    vagrant up
    

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

    vagrant box add --name=’centos/7’ { 
         mirrot_local_path}
    

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

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

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

    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 就相当于是启动虚拟机的配置文件, 常见的配置如下:

# -*- 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 也能访问主机, 只有和宿主机是互通的, 其他机器无法访问.

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

# 映射 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) 执行的操作.

# 比如: 执行打印 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级任务, 比如下面这个例子:

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

执行输出:

==> default: "foo"
==> default: "baz"
==> default: "bar"

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

# path 是基于当前 Vagrantfile 的相对路径, 与执行命令的操作是类似的
config.vm.provision "shell", path: "script.sh"

# path 可以使用 http/https 来访问远程脚本
config.vm.provision "shell", path: "https://example.com/provisioner.sh"

Vagrantfile 模拟多台虚拟机

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

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.net/210001.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GBDT算法原理_boosting算法

    GBDT算法原理_boosting算法本文对GBDT算法原理进行介绍,从机器学习的关键元素出发,一步一步推导出GBDT算法背后的理论基础,读者可以从这个过程中了解到GBDT算法的来龙去脉。对于该算法的工程实现,本文也有较好的指导意义,实际上对机器学习关键概念元素的区分对应了软件工程中的“开放封闭原则”的思想,基于此思想的实现将会具有很好的模块独立性和扩展性。

    2022年10月12日
    5
  • 网站死链查询-在线网站死链查询提交工具免费

    网站死链查询-在线网站死链查询提交工具免费网站死链查询,什么是网站死链,网站死链“死链是指服务器的地址已经改变了.无法找到当前地址位置,包括协议死链和内容死链两种形式。死链出现的原因有网站服务器设置错误;某文件夹名称修改,路径错误链接变成死链等。网站太多的死链会导致网站降权严重着甚至会导致网站被K。当然也有部分小伙伴为了得到更多的提交,专门制作死链主动提交(这属于SEO中一种另类的手法,不建议轻易尝试)更多更全的SEO工具查看图片教程。有一句,“事不过三”,就是说,同样一个新闻,第一次听到,网站死链查询会惹起很多人关注,第二次,关注的人会减少,到了

    2022年7月23日
    13
  • CSS鼠标悬浮及其样式

    CSS鼠标悬浮及其样式hover鼠标悬浮的使用和定义用法示例选择鼠标指针浮动在其上的元素,并设置其样式:.box:hover{background-color:red;}定义和用法:hover选择器用于选择鼠标指针浮动在上面的元素。提示:hover选择器可用于所有元素:link选择器设置指向未被访问页面的链接的样式,:visited选择器用于设置指向已被访问的页面…

    2022年5月31日
    38
  • 导航条的制作「建议收藏」

    导航条的制作「建议收藏」制作成品模型图:代码:一、写代码前需要准备的:万事先写(css)结构,把结构搭建好再开始写(css)样式;制作导航条一般需要用到<ul><li></li>&l

    2022年7月4日
    22
  • springmvc ajax form表单提交出现400报错

    springmvc ajax form表单提交出现400报错ajax提交form表单报400的原因总结

    2022年6月8日
    24
  • acwing-1170. 排队布局(差分约束)[通俗易懂]

    acwing-1170. 排队布局(差分约束)[通俗易懂]当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。农夫约翰有 N 头奶牛,编号从 1 到 N,沿一条直线站着等候喂食。奶牛排在队伍中的顺序和它们的编号是相同的。因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数 L。另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数 D。给出 ML 条关于两头奶牛间有好感的描述,再给出 MD

    2022年8月9日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号