virtualbox+vagrant管理虚拟机

使用vagrant来管理virtualbox的虚拟机

1.介绍

VirtualBox 是 Oracle 的 x86 和 AMD64/Intel64 虚拟化软件。它是一个免费的开源虚拟化产品,根据 GNU 通用公共许可证 (GPL) 第 2 版分发。

Vagrant 是一个用来构建和管理虚拟机环境的工具。Vagrant 有着易于使用的工作流,并且专注于自动化,降低了开发者搭建环境的时间,提高了生产力。解决了“在我的机器上可以工作”的问题。

Vagrant 是为了方便的实现虚拟化环境而设计的,使用 Ruby 开发,基于 VirtualBox 等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境。使用 Vagrant 可以很方便的就建立起来一个虚拟环境,而且可以模拟多台虚拟机,这样我们平时还可以在开发机模拟分布式系统。

2.安装

  1. 安装 VirtualBox

    进入 VirtualBox 的主页,点击下载按钮,即可进入下载页面。

  2. 安装 Vagrant

    Vagant 网站下载最新的版本,根据自己的操作系统选择对应的版本下载即可。

    Vagrant 的安装程序会自动把安装路径加入到 PATH 环境变量,所以,这时候可以通过命令行执行 vagrant version 检查是否安装成功:

    1
    2
    3
    > vagrant version
    Installed Version: 2.2.7
    Latest Version: 2.2.8
  3. 配置VirtualBox 环境变量

    创建虚拟机会占用较多的磁盘空间,在 Windows 系统下默认的虚机创建位置是在 C 盘,所以最好配置到其它地方。

    配置方法:

    启动 VirtualBox 后,通过菜单 管理 -> 全局设定,或者按下快捷键 Ctrl + g,在全局设定对话框中,修改 默认虚拟电脑位置,指定一个容量较大的磁盘。

  4. 配置Vagrant 环境变量

    通过 Vagrant 创建虚机需要先导入镜像文件,也就是 box,它们默认存储的位置在用户目录下的 .vagrant.d 目录下,对于 Windows 系统来说,就是 C:\Users\用户名\.vagrant.d

    配置方法:

    在 Windows 系统中,可以这样操作:新建系统环境变量,环境变量名为 VAGRANT_HOME,变量值为 E:\VirtualBox\.vagrant.d

3.Vagrant 使用

  1. 下载虚拟机镜像

    Vagrant 有一个镜像网站,里面列出了都有哪些镜像可以用,并且提供了操作文档

  2. 添加 box

    打开cmd窗口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看列表
    $ vagrant box list
    There are no installed boxes! Use `vagrant box add` to add some.

    # 添加box
    $ vagrant box add e:\Downloads\CentOS-7.box --name centos-7
    ==> box: Box file was not detected as metadata. Adding it directly...
    ==> box: Adding box 'centos-7' (v0) for provider:
    box: Unpacking necessary files from: file:///e:/Downloads/CentOS-7.box
    box:
    ==> box: Successfully added box 'centos-7' (v0) for 'virtualbox'!

    # 查看列表
    $ vagrant box list
    centos-7 (virtualbox, 0)
  3. 新建虚拟机

    先创建一个目录,然后执行初始化操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 创建目录
    $ mkdir demo
    $ cd demo

    #初始化虚拟机
    $ vagrant init centos-7
    A `Vagrantfile` has been placed in this directory. You are now
    ready to `vagrant up` your first virtual environment! Please read
    the comments in the Vagrantfile as well as documentation on
    `vagrantup.com` for more information on using Vagrant.

    ​ 这个命令会生成一个 Vagrantfile,可以设置网络、主机名等

  4. 启动虚机

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Importing base box 'centos-7'...
    ==> default: Matching MAC address for NAT networking...
    ==> default: Setting the name of the VM: demo_default_1588406874156_65036
    ==> default: Clearing any previously set network interfaces...
    ==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    ==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
    ==> default: Booting VM...
    ==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
  5. 查看虚机的状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ vagrant status

    Current machine states:

    default running (virtualbox)

    The VM is running. To stop this VM, you can run `vagrant halt` to
    shut it down forcefully, or you can run `vagrant suspend` to simply
    suspend the virtual machine. In either case, to restart it again,
    simply run `vagrant up`.
  6. 命令清单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    vagrant box add 添加box
    vagrant init 初始化 box
    vagrant up 启动虚拟机
    vagrant ssh 登录虚拟机
    vagrant box list 列出 Vagrant 当前 box 列表
    vagrant box remove 删除相应的 box
    vagrant destroy 停止当前正在运行的虚拟机并销毁所有创建的资源
    vagrant halt 关机
    vagrant package 把当前的运行的虚拟机环境进行打包为 box 文件
    vagrant plugin 安装卸载插件
    vagrant reload 重新启动虚拟机,重新载入配置文件
    vagrant resume 恢复被挂起的状态
    vagrant status 获取当前虚拟机的状态
    vagrant suspend 挂起当前的虚拟机
    vagrant global-status 查看当前 vagrant 管理的所有 vm 信息

4.Vagrantfile

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# -*- mode: ruby -*-
# vi: set ft=ruby :


Vagrant.configure("2") do |config|
#使用的box
config.vm.box = "centos7"
#用户名和密码
config.ssh.username = "root"
config.ssh.password = "123456"
# 网络类型
config.vm.network "private_network", ip: "192.168.11.10",auto_config: true
# 共享目录
config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
config.vm.box_check_update = false
config.ssh.insert_key = false

# hostname
config.vm.define :web do |web|
web.vm.hostname = "web.test.bd.com"
end

# 内存、cpu
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = true
# Customize the amount of memory on the VM:
vb.memory = "1024"
vb.cpus = 2
vb.name = "CentOS"
end
end

5. 其他

导出box

1
vagrant package --base centos-lnmp_default_1562568215794_41270 --output outout.box