VirtualBox+Vagrant快速搭建虚拟机
- 📖1.安装VirtualBox
- ✅下载VirtualBox
- ✅安装
- 📖2.安装Vagrant
- ✅下载Vagrant
- ✅安装
- 📖3.搭建Centos7系
- ✅1.初始化Vagrantfile并启动
- ✅2.配置网络ip地址
- ✅3.配置账号密码登录
- ✅4.配置网卡
- ✅5.配置yum国内加速
- 📖4.搭建Ubuntu20.04
- ✅1.初始化Vagrantfile并启动
- ✅2.配置网络ip地址
- ✅3.配置账号密码登录
- ✅4.配置网卡
- ✅5.配置apt国内加速
- 📖6.搭建4台Ubuntu集群
- ✅1.循环写法
- ✅2.启动和验证
- ✅4.管理命令
- ✅5.资源不够时的降配方案
在安装virtualBox和vagrant环境前,建议windows10系统使用VirtualBox-6.0.10_vagrant_2.2.5环境,windows11系统使用virtualBox-7.0.8_vagrant_2.3.7环境,亲测可以,因为VirtualBox-6.0.10_vagrant_2.2.5在windows10系统会遇到一些问题,这里避坑一下:
virtualBox-7.0.8_vagrant_2.3.7全套下载:
123云盘:https://www.123pan.com/s/4brbVv-B81WA
百度云盘:https://pan.baidu.com/s/1P_MkCLmBQx5PupfhGwoQpw?pwd=pt8u
VirtualBox-6.0.10_vagrant_2.2.5全套下载:
123云盘:https://www.123pan.com/s/4brbVv-g81WA
百度云盘:https://pan.baidu.com/s/1wc0jMiw3K21IuJ8rR7LGzA?pwd=dzic
📖1.安装VirtualBox
VirtualBox是免费开源的且安装过程简单,允许用户快速完成安装
✅下载VirtualBox
VirtualBox就是类似VMware搭载虚拟机的软件。
VirtualBox下载: https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-Win.exe
百度云盘下载:https://pan.baidu.com/s/1U-5bwsGHixY35tzcfJR0Hg?pwd=gb0l
123云盘下载:https://www.123pan.com/s/4brbVv-NC1WA
✅安装
注意:安装之前需要将电脑的
cpu虚拟化进行开启,我们可以通过快捷键Ctrl+Shift+Esc打开任务管理器查看性能中的cpu虚拟化是否开启。
如果没有开启,则需要重启电脑按F12或者其他键进入系统设置界面,不同型号电脑不一样,将cpu虚拟化开启即可。
安装完后呈现如下界面,安装的过程比较简单选好要安装的位置即可。
1.双击安装包,然后下一步
2.选择安装路径,然后默认下一步
3.选择是
4.点击下一步安装
5.点击完成
6.安装成功后打开显示如下界面
接下来我们需要在VirtualBox上面进行安装Linux系统,正常情况下我们需要进行新建,选择镜像位置然后一步步下去安装,这样我们会觉得很麻烦,所以我们可以使用Vagrant技术进行一键部署Linux系统,如下继续操作。
📖2.安装Vagrant
✅下载Vagrant
Vagrant是一站式搭建虚拟机
Vagrant安装包下载: https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.msi
百度云盘下载:https://pan.baidu.com/s/1v-vfdRFgLeNNWeTJRbDZvQ?pwd=7wfw
123云盘下载:https://www.123pan.com/s/4brbVv-RC1WA
官网镜像仓库地址:https://app.vagrantup.com/boxes/search
✅安装
1.双击安装包,然后下一步
2.勾选并下一步
3.选择安装路径,并下一步
4.开始安装
5.安装后直接点击完成,会弹框确认是否现在重启,选择no稍后重启
安装过程也是比较简单,选择好自己要安装的路径即可,安装后我们可以打开cmd进行验证是否安装成功。
win+r输入cmd,进入dos控制台界面,输入vagrant -v命令,显示版本信息则安装成功。
当我们准备了VirtualBox和Vagrant环境后,搭建虚拟机系统只需要两步
- 第一步:在指定文件目录下
打开cmd,初始化生成Vagrantfile文件 - 第二步:启动刚生成的
Vagrantfile文件
📖3.搭建Centos7系
当我们准备了VirtualBox和Vagrant环境后,搭建Centos7系统只需要两步
- 第一步:在指定文件目录下
打开cmd,初始化生成Vagrantfile文件 - 第二步:启动刚生成的
Vagrantfile文件
✅1.初始化Vagrantfile并启动
首先进入指定文件目录下打开cmd,然后使用下面初始化命令进行生成Vagrantfile文件。
在指定目录的导航栏输入cmd并回车,会自动在dos界面打开当前目录
方式一:直接初始化,然后执行初始化生成Vagrantfile文件即可
# 初始化vagrant init centos/7然后执行初始化生成Vagrantfile文件即可
显示上面则代表成功,意思是说Vagrantfile已经放在了这个目录中。你现在可以“vagrant up”你的第1个虚拟环境了,同时可以在“vagrantup.com”上的文档以获取有关使用Vagrant的更多信息。
此时会在F:\virtual_machine\centos7指定文件目录下生成Vagrantfile文件。
直接使用vagrant up命令启动刚生成的Vagrantfile文件即可。
此时我们只需要慢慢等待一步步下载镜像。
方式二:手动下载链接初始化,解决直接初始化慢问题
如果下载很慢可以提前手动下载镜像文件,参考网站:解决 vagrant up下载太慢的问题
手动下载CentOS7镜像(这里的2004_01可以修改成自己想要的版本,这里下载很快的,一两分钟就搞定了):
https://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
- 下载后放到指定目录
- 手动添加 box
vagrant boxaddcentos/7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box- 初始化并启动
vagrant init centos/7 vagrant up稍等一会就能看到我们的虚拟机进来了
安装结束后使用vagrant命令进行连接
// 连接 vagrantssh// 退出exit其他命令如下: // 启动 vagrant up // 重启 vagrant reload //停止 vagranthalt//暂停 vagrantsuspend//销毁 vagrant destroy到此一台centos7的Linux系统就一站式部署好了,当前用户为vagrant用户,而root用户的密码为vagrant。
注意:如果你在vagrant up后一直卡在default:SSH auth method: private key,并且超时,可以提升virtualbox和vagrant的版本,下面提供一个版本,安装还是和上面一样,在windows11系统亲测可以。
virtualBox-7.0.8_vagrant_2.3.7全套下载:
123云盘:https://www.123pan.com/s/4brbVv-B81WA
百度云盘:https://pan.baidu.com/s/1P_MkCLmBQx5PupfhGwoQpw?pwd=pt8u
✅2.配置网络ip地址
为什么要配置网络,因为VirtualBox使用的是转发规则,如果没有配置固定的网络ip地址的话,以后每一次完成别的软件都要设置转发规则,比较麻烦,比如说安装mysql需要在windows上设置映射端口到linux中的3306端口。
修改 Vagrantfile中的config.vm.network "private_network", ip: "192.168.56.10",而这里的ip需要在物理机下使用 ipconfig 命令找到。
最后在安装路径中的Vagrantfile文件中将如下命令的注释打开,前三位和上面IP地址一样,最后一位可以自己定。
设置完后exit退出再使用vagrant reload命令进行重启,可以使用ip addr命令进行查看是否生效。
// 退出虚拟机exit// 重启 vagrant reload // 连接 vagrantssh// 查看IPipaddr成功后主机和linux便可以互相ping通。
✅3.配置账号密码登录
在没有配置账号密码登录之前,我们只能通过ssh方式登录,如vagrant ssh,这样的话我就不能使用第三方ssh 连接工具直接连接,首先vagrant ssh 进去系统之后。
// 登陆root用户(密码是vagrant)su// 编辑ssh配置文件vi/etc/ssh/sshd_config // 开启密码权限(把 no 改成 yes) PasswordAuthenticationyes// 重启服务servicesshd restart以后可以使用提供的 ssh 连接工具直接连接。
✅4.配置网卡
如果能联网并且能够ping通www.baidu.com则可以省略这一步。
1.确认能不能联网(NAT 网卡自动上网,一般不需要配)
ping-c4www.baidu.com2.找到网卡位置
ipaddrcd/etc/sysconfig/network-scriptsVagrant 虚拟机通常两块网卡:
| 网卡名 | 用途 |
|---|---|
eth0 | NAT,自动联网,不用配 |
eth1 | Host-Only(private_network),配静态 IP |
3.编辑网卡配置
viifcfg-eth1添加如下配置:
GATEWAY=192.168.56.1# 比如ip为192.168.56.10DNS1=114.114.114.114DNS2=8.8.8.8✅5.配置yum国内加速
如果你的yum下载不了东西可以尝试下面修改更新yum,一键替换为阿里云源:
# 1. 备份原配置mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup# 2. 替换为阿里云源curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 3. 清理旧缓存并生成新缓存yum clean all yum makecache回滚方案:
mv/etc/yum.repos.d/CentOS-Base.repo.backup /etc/yum.repos.d/CentOS-Base.repo yum clean all&&yum makecache注意:VirtualBox 会与包括但不限于如下软件冲突,需要卸载这些软件,然后重启电脑;
冲突的软件:红蜘蛛,360,净网大师(有可能)等
📖4.搭建Ubuntu20.04
当我们准备了VirtualBox和Vagrant环境后,搭建Centos7系统只需要两步
- 第一步:在指定文件目录下
打开cmd,初始化生成Vagrantfile文件 - 第二步:启动刚生成的
Vagrantfile文件
✅1.初始化Vagrantfile并启动
首选进入指定文件目录下打开cmd,然后使用下面初始化命令进行生成Vagrantfile文件。
方式一:直接初始化,然后执行初始化生成Vagrantfile文件即可
# 1. 初始化vagrant init ubuntu/focal64# 2. 查看是否添加成功vagrant box list# 3. 初始化并启动vagrant init ubuntu/focal64 vagrant up方式二:手动下载链接初始化,解决直接初始化慢问题
下载地址:https://cloud-images.ubuntu.com/focal/current/
找文件名带vagrant的,例如:focal-server-cloudimg-amd64-vagrant.box
# 1. 手动添加 boxvagrant boxaddubuntu20.04 focal-server-cloudimg-amd64-vagrant.box# 2. 查看是否添加成功vagrant box list# 3. 初始化并启动vagrant init ubuntu20.04 vagrant up注意:
vagrant box add后面跟的名字可以自定义(如my-ubuntu20),后续vagrant init用同样的名字即可。
安装结束后使用vagrant命令进行连接
// 连接 vagrantssh// 退出exit其他命令如下: // 启动 vagrant up // 重启 vagrant reload //停止 vagranthalt//暂停 vagrantsuspend//销毁 vagrant destroy到此一台ubuntu的Linux系统就一站式部署好了,当前用户为vagrant用户,而root用户的密码为vagrant。
在virtualBox也可以直接管理启动
注意:如果你在vagrant up后一直卡在default:SSH auth method: private key,并且超时,可以提升virtualbox和vagrant的版本,下面提供一个版本,安装还是和上面一样,在windows11系统亲测可以。
virtualBox-7.0.8_vagrant_2.3.7全套下载:
123云盘:https://www.123pan.com/s/4brbVv-B81WA
百度云盘:https://pan.baidu.com/s/1P_MkCLmBQx5PupfhGwoQpw?pwd=pt8u
✅2.配置网络ip地址
修改 Vagrantfile中的IP,有注释则打开。
config.vm.network"private_network", ip:"192.168.56.10"IP设置多少,需要在cmd下使用 ipconfig 命令找到,可能是
以太网适配器 VirtualBox Host-Only Network:,也可能是以太网适配器 以太网 2。
如果都没看到可以进入virtualBox目录下,执行下面命令:
.\VBoxManage.exe list hostonlyifs
设置完后exit推出再使用vagrant reload命令进行重启,可以使用ip addr命令进行查看是否生效。
// 退出虚拟机 exit // 重启 vagrant reload // 连接 vagrant ssh // 查看IP ip addr为什么要配置网络,因为VirtualBox使用的是转发规则,如果没有配置固定的网络ip地址的话,以后每一次完成别的软件都要设置转发规则,比较麻烦,比如说安装myql需要在windows上设置映射端口到linux中的3306端口。
✅3.配置账号密码登录
在没有配置账号密码登录之前,我们只能通过ssh方式登录,如vagrant ssh,这样的话我就不能使用第三方ssh 连接工具直接连接,首先vagrant ssh 进去系统之后。
// 直接进 root shellsudo-i或sudosu- // root 设密码后,su 就能用刚设的密码登录了sudopasswdroot // 编辑ssh配置文件sudonano/etc/ssh/sshd_config // 开启密码权限,可以ctrl + w 搜索 PasswordAuthenticationyespermitrootloginyes// 保存:ctrl + x 后回车即可 // 重启服务并验证sudoservicesshd restartsudosshd-T|grep-iE"passwordauthentication|permitrootlogin"以后可以使用提供的 ssh 连接工具直接连接。
如果连不上可以如下处理:
# 1. 确认覆盖文件 ls /etc/ssh/sshd_config.d/ sudo cat /etc/ssh/sshd_config.d/*.conf | grep -i passwordauthentication # 2. 改掉它(二选一) # 方法一:直接编辑改成 yes sudo nano /etc/ssh/sshd_config.d/60-cloudimg-settings.conf # 方法二:删掉,让主配置文件说了算 sudo rm /etc/ssh/sshd_config.d/60-cloudimg-settings.conf # 3. 重启并验证 sudo service ssh restart sudo sshd -T | grep -iE "passwordauthentication|permitrootlogin"预期输出变成:
passwordauthentication yes以后注意,SSH 配置生效优先级(高 → 低):
/etc/ssh/sshd_config.d/*.conf ← 最优先 /etc/ssh/sshd_config ← 其次所以之前只改主文件没用。
sshd -T显示的就是最终生效值,改完配置看它变没变,比猜快得多。
✅4.配置网卡
如果能联网并且能够ping外网ip
1.先确认能不能联网(NAT 网卡自动上网,一般不需要配)
ping -c 4 www.baidu.com # ping 外网(走 NAT)2.找到网卡位置
ipaddrVagrant 虚拟机通常两块网卡:
| 网卡名 | 用途 |
|---|---|
enp0s3/eth0 | NAT,自动联网,不用配 |
enp0s8/eth1 | Host-Only(private_network),配静态 IP |
3.编辑 netplan 配置
cd/etc/netplanls你机器上会有两个文件(都保留,netplan 会按文件名顺序合并生效):
50-cloud-init.yaml ← 管 enp0s3(NAT,DHCP) 50-vagrant.yaml ← 管 enp0s8(Vagrant 自动生成的静态 IP)注意:如果你 Vagrantfile 里写了
private_network ip:,50-vagrant.yaml 已经自动生成好了,不用手动配。要改 IP 就改 Vagrantfile 然后vagrant reload。
4.写入配置
sudo nano 50-vagrant.yaml场景 1:静态 IP(手动指定地址)
network:version:2renderer:networkdethernets:enp0s8:# 网卡名,以 ip addr 看到的为准dhcp4:noaddresses:[192.168.56.10/24]nameservers:addresses:[114.114.114.114,8.8.8.8]脚本替换:
sudotee/etc/netplan/50-vagrant.yaml>/dev/null<<'EOF' network: version: 2 renderer: networkd ethernets: enp0s8: dhcp4: no addresses: [192.168.56.10/24] nameservers: addresses: [114.114.114.114, 8.8.8.8] EOFsudonetplan apply场景 2:DHCP 自动获取
network:version:2renderer:networkdethernets:enp0s8:dhcp4:true| 文件 | 管哪个网卡 | 手动改哪个 |
|---|---|---|
50-cloud-init.yaml | enp0s3(NAT) | ❌ cloud-init 管的,重启会被重新生成覆盖,改了也白改 |
50-vagrant.yaml | enp0s8(静态 IP) | ✅这才是该编辑的文件 |
5.应用配置
sudonetplan try# 先试,120秒无操作自动回滚,防断连sudonetplan apply# 确认没问题后正式应用6.验证
ipaddr show enp0s8ping-c4www.baidu.com✅5.配置apt国内加速
如果你的apt下载慢,可以尝试下面修改更新apt,一键替换(推荐 sed 方式,只改域名不动结构)
# 1. 备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup-$(date +%Y%m%d) # 2. 替换为阿里云(官方源和 security 源域名都换掉) sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g; s|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list # 3. 验证替换结果 grep "^deb" /etc/apt/sources.list预期输出:
deb https://mirrors.aliyun.com/ubuntu focal main restricted deb https://mirrors.aliyun.com/ubuntu focal-updates main restricted ... deb https://mirrors.aliyun.com/ubuntu focal-security main restricted# 4. 刷新索引 + 测试sudoaptupdatesudoaptinstall-yhtop# 装个小软件测速回滚方案:
sudocp/etc/apt/sources.list.backup-xxxx /etc/apt/sources.listsudoaptupdate📖6.搭建4台Ubuntu集群
下面直接给出4台完整配置。
集群规划(4台节点,宿主机建议16G内存以上):
| 节点 | IP | 内存 | CPU |
|---|---|---|---|
| node1 | 192.168.56.11 | 2G | 2 |
| node2 | 192.168.56.12 | 2G | 2 |
| node3 | 192.168.56.13 | 2G | 2 |
| node4 | 192.168.56.14 | 2G | 2 |
注意:笔记本8G内存的话,每台改成1G内存1核CPU,4台共4G。
✅1.循环写法
节点定义区整段替换为:
Vagrant.configure("2")do|config|config.vm.box="ubuntu/focal64"config.vm.box_check_update=false# Replace apt source with Aliyun mirror (runs on every node)config.vm.provision"shell",inline:<<-SHELLsed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g; s|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list apt-get updateSHELL# Write /etc/hosts so nodes can reach each other by nameconfig.vm.provision"shell",inline:<<-SHELLfor i in 1 2 3 4; do echo "192.168.56.$((10+i)) node$i" >> /etc/hosts doneSHELL# ============ node definitions (loop) ============# Change (1..4) to adjust node count(1..4).eachdo|i|# loop 4 times, one node per iterationconfig.vm.define"node#{i}"do|node|# machine name: node1 ~ node4node.vm.hostname="node#{i}"# hostname inside the VMnode.vm.network"private_network",ip:"192.168.56.#{10+i}"# Host-Only static IP: .11 ~ .14node.vm.provider"virtualbox"do|vb|vb.name="cluster-node#{i}"# display name in VirtualBox GUIvb.memory=2048# 2G RAMvb.cpus=2# 2 coresendendendend需要改的地方只有 4 处,都标了箭头:
| 位置 | 改什么 |
|---|---|
(1..4) | 节点数量(如 6 台改(1..6)) |
192.168.56. | IP 网段(必须和宿主机 Host-Only 网卡同网段,用ipconfig查) |
vb.memory = 2048 | 每台内存,宿主机8G就改 1024 |
vb.cpus = 2 | 每台CPU核数 |
✅2.启动和验证
// 校验,预期输出:Vagrantfile validated successfully. vagrant validate // 启动全部4台 vagrant up // 查看状态,应为4台 running vagrant status // 一键停止全部(正常关机) vagranthalt| 需求 | 命令 | 效果 |
|---|---|---|
| 一键启动 | vagrant up | 所有节点开机 |
| 一键停止 | vagrant halt | 所有节点正常关机(数据安全) |
| 一键暂停 | vagrant suspend | 挂起(开机最快,占磁盘) |
| 一键删除 | vagrant destroy -f | 全部删除(配置在 Vagrantfile,随时重建) |
| 查看状态 | vagrant status | 各节点运行情况 |
预期输出:
Current machine states: node1 running (virtualbox) node2 running (virtualbox) node3 running (virtualbox) node4 running (virtualbox)互访测试:
// 登录 node1 vagrantsshnode1 // 依次ping其他3台(hosts已配好,直接用名字)ping-c2node2ping-c2node3ping-c2node4✅4.管理命令
vagrantsshnode4 // 登录 node4 vagranthaltnode4 // 只关 node4 vagrant reload node4 // 只重启 node4 vagrant destroy node4 // 只删 node4做成 Windows 双击运行的脚本(更"一键"),在项目目录新建两个文件:
启动.bat
@echo off cd /d F:\virtual_machine\ubuntu-cluster vagrant up pause停止.bat
@echo off cd /d F:\virtual_machine\ubuntu-cluster vagrant halt pause以后双击对应文件即可,不用开 PowerShell。
✅5.资源不够时的降配方案
4台 × 2G = 8G 内存,宿主机吃紧就降配:
vb.memory=1024# 每台1Gvb.cpus=1# 每台1核改完vagrant reload生效。
如果还是卡,可以只启动部分节点(比如只起 node1、node2 做测试),
vagrant status里未启动的显示not created或poweroff,不影响其他节点。