vagrant(1)介绍及离线添加box

1. 什么是 Vagrant?

1.1 内容

  • Vagrant 的定义与作用
    Vagrant 是一个用于构建和管理虚拟机环境的开源工具,主要用于创建一致、可重复的开发环境。它通过脚本化的方式(主要是 Vagrantfile)定义虚拟机配置,简化环境搭建流程。
  • Vagrant 的优势
    • 环境一致性:确保开发、测试、生产环境一致,避免“在我机器上可以运行”的问题。
    • 快速部署:通过预配置的 Box 文件快速启动虚拟机。
    • 跨平台支持:支持 Windows、macOS、Linux,支持多种虚拟化提供者(如 VirtualBox、VMware、Hyper-V)。
  • Vagrant 与其他工具的对比
    • Vagrant vs Docker:Vagrant 创建完整的虚拟机(包含操作系统),而 Docker 使用容器(共享主机内核)。Vagrant 更适合需要完整系统隔离的场景。
    • Vagrant vs Terraform:Terraform 用于基础设施即代码(IaC),多用于云端资源管理;Vagrant 更专注于本地开发环境。
  • 适用场景
    • 本地开发环境:如 LAMP、LEMP 栈。
    • 测试环境:模拟生产环境。
    • 学习新工具:如 Hadoop、Kubernetes 等复杂系统。

box provider/provisioner 302ba9daab2d1c405366fef334b876a6.png


2. 安装与环境准备

2.1 内容

  • 安装 Vagrant 和虚拟机提供者
    • Vagrant 本身不提供虚拟化功能,需配合 VirtualBox、VMware 或 Hyper-V 等提供者。
    • 本教程以 VirtualBox 为例(免费且跨平台)。
  • 环境验证
    • 确保 Vagrant 和 VirtualBox 正常运行。
  • 常见问题排查
    • 解决安装过程中的常见问题,如权限、网络、虚拟化支持。

2.2 操作

  1. 安装 VirtualBox
    • 访问 VirtualBox 官网,下载适用于你操作系统的版本。
    • 安装步骤:
      • Windows:双击安装包,按提示安装。

      • macOS:双击 .dmg 文件,拖动到 Applications。

      • Linux:以 Ubuntu 为例,运行:

        1
        2
        sudo apt update
        sudo apt install -y virtualbox
  2. 安装 Vagrant
    • 访问 Vagrant 下载页面,下载对应版本。
    • 安装步骤:
      • Windows:双击安装包,按提示完成。

      • macOS:使用 Homebrew:

        1
        brew install vagrant
      • Linux(Ubuntu):运行:

        1
        2
        sudo apt update
        sudo apt install -y vagrant
  3. 验证安装
    • 打开终端(Windows:命令提示符或 PowerShell;macOS/Linux:终端)。

    • 检查 VirtualBox 版本:

      1
      vboxmanage --version
    • 检查 Vagrant 版本:

      1
      vagrant --version

2.3 代码示例

  • 验证命令:

    1
    2
    vboxmanage --version
    vagrant --version

2.4 预期输出

  • vboxmanage --version 输出示例:

    7.0.12r159484
    
  • vagrant --version 输出示例:

    Vagrant 2.3.7
    

2.5 错误处理

  • 命令未找到
    • 问题:运行 vagrantvboxmanage 提示“命令未找到”。
    • 解决:检查 PATH 环境变量是否包含 Vagrant 和 VirtualBox 的安装路径。
      • Windows:右键“此电脑” -> 属性 -> 高级系统设置 -> 环境变量 -> 编辑 PATH。

      • macOS/Linux:在 ~/.bashrc~/.zshrc 中添加:

        1
        export PATH=$PATH:/path/to/vagrant
  • 虚拟化支持未开启
    • 问题:VirtualBox 启动失败,提示需要 VT-x/AMD-V
    • 解决:重启电脑进入 BIOS,启用虚拟化支持(通常在“CPU 配置”或“高级设置”中)。
  • 网络问题
    • 问题:下载安装包失败。
    • 解决:检查网络连接,或使用镜像站(如国内用户可从阿里云镜像站下载)。

3. 第一个 Vagrant 环境

3.1 内容

  • 初始化 Vagrant 项目:使用 vagrant init 创建基础配置文件。
  • 启动虚拟机:通过 vagrant up 下载并启动虚拟机。
  • 连接虚拟机:使用 vagrant ssh 登录虚拟机。
  • 基本操作:暂停、重启、关闭、销毁虚拟机。

3.2 操作

  1. 创建项目目录并初始化
    • 创建一个新目录:

      1
      2
      mkdir my-vagrant-project
      cd my-vagrant-project
    • 初始化 Vagrant 项目,指定一个官方 Box(如 Ubuntu 18.04 LTS):

      1
      vagrant init hashicorp/bionic64
    • 检查生成的 Vagrantfile

      1
      2
      3
      Vagrant.configure("2") do |config|
      config.vm.box = "hashicorp/bionic64"
      end
  2. 启动虚拟机
    • 运行以下命令,Vagrant 会自动下载 Box 并启动虚拟机:

      1
      vagrant up
  3. 连接虚拟机
    • 使用 SSH 登录虚拟机:

      1
      vagrant ssh
    • 在虚拟机内运行命令验证:

      1
      2
      3
      whoami  # 输出:vagrant
      pwd # 输出:/home/vagrant
      lsb_release -a # 查看系统信息
  4. 基本操作
    • 暂停虚拟机:

      1
      vagrant suspend
    • 恢复虚拟机:

      1
      vagrant resume
    • 重启虚拟机:

      1
      vagrant reload
    • 关闭虚拟机:

      1
      vagrant halt
    • 销毁虚拟机(删除所有资源):

      1
      2
      vagrant destroy
      vagrant destroy -f #强制销毁

3.3 代码示例

  • 初始化命令:

    1
    vagrant init hashicorp/bionic64
  • 启动命令:

    1
    vagrant up
  • 登录后运行:

    1
    2
    whoami
    lsb_release -a

3.4 预期输出

  • vagrant up 输出示例:

    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Box 'hashicorp/bionic64' successfully added...
    ==> default: Importing base box 'hashicorp/bionic64'...
    ==> default: Machine booted and ready!
    
  • vagrant ssh 后:

    • whoami 输出:vagrant

    • lsb_release -a 输出示例:

      Distributor ID: Ubuntu
      Description:    Ubuntu 18.04.6 LTS
      Release:        18.04
      Codename:       bionic
      

3.5 错误处理

  • Box 下载失败
    • 问题:vagrant up 卡在下载 Box 或报网络错误。
    • 解决:
      1. 检查网络连接。

      2. 手动下载 Box 文件(从 Vagrant Cloud 搜索 hashicorp/bionic64),然后添加:

        1
        vagrant box add hashicorp/bionic64 /path/to/downloaded.box
  • 虚拟机启动失败
    • 问题:提示 VirtualBox 错误。
    • 解决:
      1. 确保 VirtualBox 已正确安装。
      2. 检查是否有其他虚拟机软件(如 VMware)冲突,关闭后再试。
      3. 查看详细日志:vagrant up --debug
  • SSH 连接失败
    • 问题:vagrant ssh 报错。
    • 解决:
      1. 确保虚拟机已启动(vagrant status)。
      2. 检查 SSH 配置是否正确(Vagrantfile 中是否有 config.ssh 修改)。

4. Box 的基础

4.1 内容

  • Box 的概念:Box 是 Vagrant 的虚拟机镜像文件,包含预装的操作系统和基础配置。
  • 获取和管理 Box:从 Vagrant Cloud 下载 Box,管理本地 Box。
  • 常用 Box 推荐:Ubuntu、CentOS、Debian 等流行系统。

4.2 操作

  1. 列出本地 Box
    • 查看已下载的 Box:

      1
      vagrant box list
  2. 添加一个新 Box
    • 下载一个 CentOS Box:

      1
      vagrant box add centos/7
    • 等待下载完成(视网络速度可能需要几分钟)。

  3. 修改 Vagrantfile 使用新 Box
    • 编辑 Vagrantfile,将 Box 改为 centos/7

      1
      2
      3
      Vagrant.configure("2") do |config|
      config.vm.box = "centos/7"
      end
    • 启动虚拟机:

      1
      vagrant up
    • 登录并验证:

      1
      2
      vagrant ssh
      cat /etc/redhat-release # 输出:CentOS Linux release 7.x
  4. 管理 Box
    • 更新 Box 到最新版本:

      1
      vagrant box update
    • 删除 Box:

      1
      vagrant box remove centos/7

4.3 代码示例

  • 添加 Box:

    1
    vagrant box add centos/7
  • 列出 Box:

    1
    vagrant box list
  • 修改 Vagrantfile

    1
    config.vm.box = "centos/7"

4.4 预期输出

  • vagrant box list 输出示例:

    centos/7           (virtualbox, 2004.01)
    hashicorp/bionic64 (virtualbox, 201912.0.0)
    
  • cat /etc/redhat-release 输出:

    CentOS Linux release 7.9.2009 (Core)
    

4.5 错误处理

  • Box 下载失败
    • 问题:网络中断或 Box 不存在。
    • 解决:
      1. 确保网络正常。
      2. 检查 Box 名称是否正确(可在 Vagrant Cloud 搜索)。
      3. 手动下载后添加(类似第 3 节)。
  • Box 版本冲突
    • 问题:vagrant up 提示 Box 版本不匹配。

    • 解决:更新 Box(vagrant box update)或指定版本:

      1
      config.vm.box_version = "2004.01"
  • 磁盘空间不足
    • 问题:Box 下载或解压失败,提示空间不足。
    • 解决:清理磁盘空间,或更改 Vagrant 默认存储路径:
      • 设置环境变量 VAGRANT_HOME,如:

        1
        export VAGRANT_HOME=/path/to/new/location

资源补充


常见问题与解决(FAQ)

  1. Q:安装 VirtualBox 后启动失败?
    A:检查 BIOS 是否启用虚拟化支持(VT-x/AMD-V),关闭其他虚拟化软件(如 Hyper-V)。
  2. Q:vagrant up 卡在下载?
    A:检查网络连接,或手动下载 Box 文件后添加。
  3. Q:vagrant ssh 无法连接?
    A:确保虚拟机已启动(vagrant status),检查 SSH 配置(默认用户为 vagrant)密码 vagrant
  4. Q:磁盘空间不足怎么办?
    A:清理磁盘,或更改 VAGRANT_HOME 路径。

Refer