Vagrant 开发环境¶
一句话概述:Vagrant 是 HashiCorp 出品的开发环境管理工具,用一个 Vagrantfile 就能自动创建完全一致的虚拟机开发环境,告别"在我电脑上能跑"。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| Box | 盒子 = 预打包的虚拟机镜像模板 |
| Vagrantfile | 配置文件 = 描述虚拟机怎么配置的 Ruby 脚本 |
| Provider | 提供者 = 底层虚拟化工具(VirtualBox、VMware、Docker) |
| Provisioner | 供应器 = 虚拟机启动后自动运行的配置脚本 |
| Synced Folder | 同步文件夹 = 主机和虚拟机共享的目录 |
安装配置¶
# macOS
brew install vagrant # 安装 Vagrant
brew install --cask virtualbox # 安装 VirtualBox(默认 Provider)
# Ubuntu
sudo apt install virtualbox # 安装 VirtualBox
wget https://releases.hashicorp.com/vagrant/2.4.3/vagrant_2.4.3-1_amd64.deb # 下载
sudo dpkg -i vagrant_2.4.3-1_amd64.deb # 安装
# 验证
vagrant version # 查看版本
基本使用¶
1. 快速启动¶
mkdir my-project && cd my-project # 创建项目目录
vagrant init ubuntu/jammy64 # 生成 Vagrantfile(Ubuntu 22.04)
vagrant up # 启动虚拟机(首次会下载 Box)
vagrant ssh # SSH 进入虚拟机
vagrant halt # 关机
vagrant destroy # 销毁虚拟机
2. 自定义 Vagrantfile¶
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64" # 基础镜像
# 网络配置
config.vm.network "forwarded_port", guest: 8080, host: 8080 # 端口转发
config.vm.network "private_network", ip: "192.168.56.10" # 私有网络
# 同步文件夹(主机 ./data 映射到虚拟机 /home/vagrant/data)
config.vm.synced_folder "./data", "/home/vagrant/data"
# 虚拟机资源配置
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096" # 4GB 内存
vb.cpus = 2 # 2 个 CPU
vb.name = "bioinfo-dev" # 虚拟机名称
end
# 自动安装软件
config.vm.provision "shell", inline: <<-SHELL
apt-get update # 更新包列表
apt-get install -y python3 python3-pip # 安装 Python
pip3 install biopython pandas # 安装生信包
SHELL
end
3. 多机环境¶
Vagrant.configure("2") do |config|
config.vm.define "web" do |web| # Web 服务器
web.vm.box = "ubuntu/jammy64"
web.vm.network "private_network", ip: "192.168.56.10"
end
config.vm.define "db" do |db| # 数据库服务器
db.vm.box = "ubuntu/jammy64"
db.vm.network "private_network", ip: "192.168.56.11"
db.vm.provision "shell", inline: "apt-get install -y postgresql"
end
end
常见报错¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
VBoxManage not found | VirtualBox 未安装 | 安装 VirtualBox |
The box could not be found | Box 名称错误 | 在 app.vagrantup.com 搜索正确名称 |
Port 8080 is already in use | 端口冲突 | 换一个端口或关闭占用进程 |
Mount failed | 共享文件夹挂载失败 | vagrant plugin install vagrant-vbguest |
速查表¶
vagrant init <box> # 初始化
vagrant up # 启动虚拟机
vagrant ssh # SSH 进入
vagrant halt # 关机
vagrant reload # 重启(重新加载 Vagrantfile)
vagrant provision # 重新执行供应脚本
vagrant destroy # 销毁虚拟机
vagrant status # 查看状态
vagrant box list # 列出已下载的 Box
vagrant box add <box> # 下载 Box
vagrant snapshot save <name> # 保存快照
vagrant snapshot restore <name> # 恢复快照
参考:Vagrant 文档 | 更新于 2026 年