Vagrant 简要介绍

vagrant 是一个开源的基于Ruby虚拟机生命周期管理工具,可以自动化创建、管理和销毁各种类型的虚拟机,包括 Virtualbox 、VMware、kvm、docker 等。其主要功能有如下:

  • 创建、删除虚拟机
  • 配置虚拟机参数
  • 管理虚拟机运行状态
  • 自动化配置和安装开发环境
  • 打包和分发虚拟机环境

Vagrant 中的各种概念:

  • Box:Vagrant 虚拟环境中的“包”,个人理解是一个虚拟机镜像,与 Docker 中的镜像有点类似,用于快速分发虚拟环境(其实也不快,毕竟是个虚拟机,随便一个就几 GB)
  • Vagrantfile:一个用于描述虚拟环境的配置文件,总体上来看会和 docker-compose.yml 的概念更加接近,在 Vagrantfile 中可以配置需要启动的虚拟机的配置,hostname、网络和第一次启动后的安装脚本,并且 Vagrantfile 支持启动多个虚拟机(因此说他是虚拟环境的配置文件)
  • Provision:用于指定在 Vagrant 配置并启动好虚拟机后的安装脚本,这个一般只在第一次 vagrant up 时执行。
  • Networking:虚拟环境中的网络配置,更多介绍可以见Vagrant 网络
  • Provider:由于 Vagrant 只是一个虚拟环境管理工具,因此其本身并没有任何虚拟化的相关功能,所有虚拟化相关的功能都需要通过一个虚拟机软件来支持,这个虚拟机软件就被称为 Provider,常见的 Provider 有 Virtualbox、VMware、docker 等。

Vagrant Quick Start

下面过程以 Ubuntu 20 为例:

  1. 安装 Vagrant:sudo apt-get install vagrant
    1. 如果没有 Virtualbox 的话,需要额外安装 Virtualbox:sudo apt-get install virtualbox
  2. 初始化环境:vagrnat init。最好在某个空文件夹中执行,该文件夹只与当前虚拟环境相关。
  3. 导入一个 Box 到本地
    1. 这里选择从清华镜像源中下载并导入
    2. 需要先去镜像仓库中找到一个对应版本的.box文件的网址
    3. 然后使用vagrant add命令添加,如vagrant box add ubuntu20 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/base/server/daily/focal/20220215/focal-server-cloudimg-amd64-vagrant.box
  4. 修改 Vagrantfile,config.vm.box = "ubuntu20"
  5. 启动环境:vagrant up
  6. 使用ssh连接虚拟机,vagrant ssh,默认用户名和密码均为vagrant,且sudo不需要输入密码

Vagrant cheat sheet

# 在当前文件夹下初始化 => 创建一个 Vagrant
vagrant init 
 
# 增加一个 Vagrant Box
vagrant box add <box-name> # 从 Vagrant Cloud 中下载 Vagrant Box
vagrant box add <box-name> <url/file> # 给定网址或者文件中下载 Vagrant Box
 
# 根据当前文件夹下的 Vagrant 创建、初始化并启动虚拟机
vagrant up 
 
# 使用 ssh 连接虚拟机
vagrant ssh [vm name]
 
# 删除虚拟机
vagrant destropy

Vagrant Tips

修改镜像存储位置

  1. 修改 Box 存储位置:在 .bashrc 或者 .zshrc 中加入 export VAGRANT_HOME="/path/to/dir"
  2. 修改虚拟机存储的位置:需要修改 provider 的默认设置,以 Virtualbox 为例, vboxmanage setproperty machinefolder /path/to/dir