Vagrant的安装和使用(附带安装Centos 7教程)

1 Vagrant 概述

Vagrant 是⼀款⽀持⾃动化虚拟机安装、可配置流程的⽤于管理虚拟机的软件. 主要的优势在于可以提供⼀个可配置、可移植和复⽤的虚拟机环境 (通过定义 Vagrantfile , 类似 Dockerfile ), 并且可以使⽤shell、chef、puppet 等⼯具进⾏部署. 这⾥要注意, Vagrant 并不能单独使⽤, 必须要在⾃⼰的电脑⾥安
装额外的虚拟机软件, ⽐如常⻅的虚拟机软件有: VirtualBox、VMWare 等。

2 Vagrant 安装

Vagrant 官⽹下载地址: https://www.vagrantup.com/downloads.html
VirtualBox 官⽹下载地址: https://www.virtualbox.org/wiki/Downloads
官⽅镜像地址 https://app.vagrantup.com/boxes/search

3 配置默认安装⽬录

3.1 VirtualBox虚拟机⽬录

不想装在C盘的话,按照如下方法改变路径。
打开 VirtualBox 程序,点击 管理/全局设定 菜单项(Ctrl+G), 将 常规 栏⾥的 默认虚拟电脑位置(M) 改为其他磁盘下的路径将原路径C:\Users\user_name.VirtualBox\VirtualBox VMs 下的⽂件移动到新路径下。
重新启动VirtualBox程序,在虚拟机列表⾥,以前建⽴的虚拟机虽然都还在,但已经不可⽤了,将他们全部删除。
双击打开新路径各个⽂件夹⾥的vbox⽂件,将建⽴的虚拟机重新导⼊。

3.2 vagrant配置⽂件的位置

将 C:\Users\user_name.vagrant.d 移动到新的位置
新建环境变量 VAGRANT_HOME ,并指向新路径

在这里插入图片描述
下载好box以后一路默认安装下去就行了。
在这里插入图片描述

4 安装 CentOS

这⾥通过 centos 7 来做个例⼦, 来快速安装⼀个 centos 7 的虚拟机

  1. ⾸先可以通过 Vagrant Cloud ⽹站去查找需要的镜像, 展示出来的标题就是 box 名称, ⽐如
    centos/7 就是⼀个 box (可以简单理解为镜像)

在这里插入图片描述
2. 新建⼀个⽬录 (⽐如: ~/virtual-os/centos7/) , 然后执⾏如下命令在当前⽬录初始化⼀个 Vagrantfile
配置⽂件

vagrant init centos/7

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
执⾏如下命令, 启动虚拟机

vagrant up

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

vagrant status

在这里插入图片描述

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

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

vagrant halt
vagrant destory

可以看到分配的地址:10.0.2.15/24
在这里插入图片描述

5 修改网络配置

这是win11的界面,win10 找也是差不多的,类似这个。
在这里插入图片描述
修改Vagrantfile

config.vm.network "private_network", ip: "192.168.56.20"

修改前:
在这里插入图片描述
修改后:
在这里插入图片描述

修改完成后,重启启动vagrant

vagrant reload

检查宿主机和virtualBox之间的通信是否正常
[vagrant@localhost ~]$ ping 本机地址
在这里插入图片描述

开启远程登陆,修改“/etc/ssh/sshd_config”

用root账号去改。root 密码是 vagrant
在这里插入图片描述
可以看到现在是root
在这里插入图片描述
再次输入

vi /etc/ssh/sshd_config

可以看到
在这里插入图片描述

PermitRootLogin yes
PasswordAuthentication yes

在这里插入图片描述
改了就行。

然后重启SSHD

systemctl restart sshd

使⽤Xshell或SecureCRT进⾏远程连接即可

6 基本命令

在这里插入图片描述

7 配置文件

常⽤相关配置说明
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)"

8 模拟多台虚拟机

这⾥就直接看⼀个配置⽂件吧, 如果看完前⾯的说明, 基本也知道这个配置⽂件是在做啥了~

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 = "centos/7"
 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 = "centos/7"
 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 = "centos/7"
 redis.vm.hostname = "redis"
 reids.vm.network :private_network, ip: "11.11.1.2"
 end
end

这⾥定义的虚拟机都是互通的, 这样就可以在单机中模拟分布式机器的情况啦, 这样我们在学习 k8s 的话,这种⽅式应该还是挺轻松的, 通过⼀个配置⽂件可以管理多台虚拟机。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值