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实现集成预安装

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Android开发 更改返回button的图标

    Android开发 更改返回button的图标

  • 字符串中最长的回文字符串长度

    字符串中最长的回文字符串长度1、回文字符串  回文字符串是指aba类型的字符串,即字符串关于中间字符对称。判断字符串中是否含有回文、得到最长回文字符串的长度、得到不同回文字符串的个数等等,是经常考察的编程题目。2、之前采用的一种比较笨的得到最长回文字符串的方法  思想:双重指针遍历,根据回文字符串的特点,回文开始的字符与结尾处字符相同……那么一个指针i从前向后遍历,一个指针j从后向前遍历,如果出现

  • 将xml转成json c语言,把XML文件内容转成JSON串

    将xml转成json c语言,把XML文件内容转成JSON串publicstaticStringConvertXMLtoJSON(“f:/test.xml”){//获取xml字符串Stringxml=getXMLString(filePath);//序列化XMLSerializerxmlSerializer=newXMLSerializer();//把xml内容转成jsonJSONjson=xmlSerializer.rea…

  • hadoop如何查看文件系统

    hadoop如何查看文件系统

  • crontab怎么使用_crontab配置

    crontab怎么使用_crontab配置    使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行安装:apt-getinstallcron  (服务器环境下默认都会安装)使用:crontab-e  进入编辑页面(第一次进入会让你选择编辑器)       crontab-l  查看当前的定时任务以上是crontab的使用规则,以及定时方法的…

  • linux 批处理教程,最全的批处理入门教程,菜鸟必看[通俗易懂]

    linux 批处理教程,最全的批处理入门教程,菜鸟必看[通俗易懂]1.这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前。2.先概述一下批处理是个什么东东。批处理的定义,至今我也没…

发表回复

您的电子邮箱地址不会被公开。

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