Vagrant


在这里插入图片描述

Vagrant介绍

Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the “works on my machine” excuse a relic of the past.

Vagrant在某种程度上和docker类似,是一个用来构建和管理虚拟机环境的工具,是为了方便的实现虚拟化环境而设计的,基于 VirtualBox 等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境,降低了开发者搭建环境的时间。使用 Vagrant 可以很方便的就建立起来一个虚拟环境,而且可以模拟多台虚拟机。
Vagrant解决了 “在我的机器上可以工作” 的问题。

为什么使用Vagrant

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team.

Vagrant可以为我们快速搭建开发环境,无需从头开始安装虚拟机、下载ISO镜像、创建VM、配置环境等步骤,提高开发效率。同时封装好的开发环境大家可以共用,避免了环境不一致导致不同机器上运行效果不同的问题。

安装步骤

  1. 安装VirtualBox
    Vagrant本身并没有能力创建虚拟机,它是调用一些虚拟化工具来创建,如VirtualBox、VMWare、Xen、Docker,甚至AWS,这些虚拟化工具只要安装好了,vagrant会自动封装在底层通过统一的命令调用。也就是说使用vagrant时你电脑上还需要安装对应的Provider,默认是免费开源的virtualbox。下载地址:https://www.virtualbox.org/wiki/Downloads
  2. 安装Vagrant
    下载地址:https://www.vagrantup.com/downloads.html
  3. 下载Box
    查找所需的Box:https://app.vagrantup.com/boxes/search

Box & Vagrantfile

  • box:一个打包好的操作系统,是一个后缀名为.box的文件,里面包含了Vagrant的配置信息和VirtualBox的虚拟机镜像文件。vagrant up 启动虚拟机是基于 box 文件的,因此在启动虚拟机前必须得把 box文件准备好,或者也可以在启动的时候指定远程 box 地址。
  • Vagrantfile: Vagrant根据Vagrantfile中的配置来创建虚拟机,是Vagrant的核心。在Vagrantfile文件中你需要指明使用哪个Box(可以下载好的或自己制作,或指定在线的URL地址),虚拟机使用的内存大小和CPU,需要预安装哪些软件,虚拟机的网络配置,与host的共享目录等。

Vagrant基本命令

  • 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 管理的所有虚拟机运行情况信息

使用Vagrant

使用远程box快速创建虚拟机

  1. 进入 https://app.vagrantup.com/boxes/search (或者http://www.vagrantbox.es/)使用其中已有的Box:
    在这里插入图片描述
  2. 点击第一个Box:ubuntu/trusty64,选择版本v20190226.0.0
    在这里插入图片描述
  3. 创建文件夹master,并在该目录下打开powershell,输入以下命令:
    在这里插入图片描述
  4. 运行结果如下
    在这里插入图片描述
  5. 使用vagrant ssh命令连接到虚拟机
    在这里插入图片描述
  6. 虚拟机共享目录
    在这里插入图片描述
    虚拟机/vagrant/目录下的文件与宿主机Vagrantfile文件所在目录共享,所拥有的文件保持一致。

在上述创建虚拟机的过程中,我们使用vagrant init ubuntu/trusty64命令,此时我们已经安装了一个box,无需再使用vagrant box add来添加box到vagrant
在这里插入图片描述
配置Vagrantfile创建虚拟机
之所以使用这种方法创建虚拟机,是为了熟悉Vagrantfile中的各种配置。

  1. 创建文件夹node1,在该文件下执行命令vagrant init
    在这里插入图片描述
  2. 打开Vagrantfile,并进行配置:
    下面配置中所使用的box即为添加到Vagrant中的box,如果之前并没有添加到Vagrant中,当Vagrant运行时Vagrant将自动联网下载并添加此box。
    Vagrant.configure("2") do |config|
    	config.vm.box = "ubuntu/trusty64"
    end
    
    # 也可以通过`config.vm.box_version`来明确制定一个box版本
    Vagrant.configure("2") do |config|
    	config.vm.box = "ubuntu/trusty64"
    	config.vm.box_version = "20190226.0.0"
    end
    
  3. 启动(vagrant up)虚拟机
    在这里插入图片描述
    之后我们同样可以使用vagrant ssh来登录虚拟机。

打包分发
当我们配置好开发环境之后,退出并关闭虚拟机。在终端里对开发环境进行打包:

$ vagrant package --help
Usage: vagrant package [options] [name|id]

Options:

        --base NAME                  Name of a VM in VirtualBox to package as a base box (VirtualBox Only)
        --output NAME                Name of the file to output
        --include FILE,FILE..        Comma separated additional files to package with the box
        --vagrantfile FILE           Vagrantfile to package with the box
    -h, --help                       Print this help


	--base NAME :virtualbox程序里面的虚拟机的名称,不是box的名字也不是Vagrantfile里面的虚拟机名称.默认是打包当前目录下面的虚拟机 
	--output NAME :要打包成的box名称,不会自动添加.box后缀,要手动加后缀,默认值package.box

打包完成后,会在当前目录下生成一个NAME的文件,其他用户得到该文件后可以使用此box来创建一个一模一样的开放环境。
我们将上述过程中创建的虚拟机node1进行打包:

$ vagrant package node.box
==> default: Exporting VM...
==> default: Compressing package to: D:/k8s/node1/node.box

之后我们便可以使用此box来创建一个相同的开发环境:

  1. 将生成的box添加到vagrant

    $  vagrant box list
    ubuntu/trusty64 (virtualbox, 20190226.0.0)
    
    $ vagrant box add node ../node1/node.box
    ==> box: Box file was not detected as metadata. Adding it directly...
    ==> box: Adding box 'node' (v0) for provider:
        box: Unpacking necessary files from: file://D:/k8s/node1/node.box
        box: Progress: 100% (Rate: 51.3M/s, Estimated time remaining: --:--:--)
    
    $ vagrant box list
    node            (virtualbox, 0)
    ubuntu/trusty64 (virtualbox, 20190226.0.0)
    
  2. 之后步骤与之前类似

    $  vagrant init node
    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.
    

集成预安装

当我们采用打包分发的方式来让小组成员使用的统一的开发环境时,如果我们中添加了其他依赖,或者修改了部分环境配置,就需要重新打包分发给其他用户,这样就比较麻烦。
其实,Vagrant提供了更为便捷的预安装机制和重载机制。我们首先查看Vagrantfile文件末尾处有以下代码:

config.vm.provision "shell", inline: <<-SHELL
   apt-get update
   apt-get install -y apache2
SHELL

这段代码是在第一次执行vagrant up命令时,虚拟机自动执行的一系列初始化命令。如果虚拟机已经创建完毕,并且修改了上述位置的代码,那么我们可以使用vagrant reload --porvision进行重载。所以在这种情况下,我们只要将Vagrantfile共享给小组成员即可。

网络设置

Vagrant 有两种方式来进行网络连接,一种是 host-only (主机模式),这种模式下所有的虚拟系统是可以互相通信的,但虚拟系统和真实的网络是被隔离开的,虚拟机和宿主机是可以互相通信的,相当于两台机器通过双绞线互联。另一种是Bridge(桥接模式),该模式下的虚拟机就像是局域网中的一台独立的主机,可以和局域网中的任何一台机器通信,这种情况下需要手动给虚拟机配 IP 地址,子网掩码等。我们一般选择 host-only 模式,配置如下:

config.vm.network :private_network, ip: "11.11.11.11"

配置端口转发:将宿主机8080端口映射到虚拟机80端口:

config.vm.network :forwarded_port, guest: 80, host: 8080

使用xshell远程连接虚拟机

假设我们将虚拟机node3(hostname)的ip地址设置为172.17.8.103,则:
在这里插入图片描述

遇到的问题

  1. powershell版本过低:

    $ vagrant up
    The version of powershell currently installed on this host is less than
    the required minimum version. Please upgrade the installed version of
    powershell to the minimum required version and run the command again.
    
      Installed version: 2
    
      Minimum required version: 3
    

    解决方法:
    前往微软官方地址下载最新版本powershell安装即可。
    安装成功之后重启电脑,再次运行vagrant up命令。

  2. 虚拟机账户名:vagrant;密码:vagrant

  3. 当我们打包虚拟机时报错:

    ==> default: Attempting graceful shutdown of VM…
    The following SSH command responded with a non-zero exit status.
    Vagrant assumes that this means the command failed!
    shutdown -h now
    Stdout from the command:
    Stderr from the command:
    bash: line 4: shutdown: command not found

    此时,我们可以打开任务管理器将有关VirutalBox的进程杀掉,再次打包即可。

  4. 当我们vagrant up启动虚拟机失败,并报错如下:
    在这里插入图片描述
    此时对应Virtual Box中虚拟机启动状态如下:
    在这里插入图片描述
    这个错误我并没有找到解决方法,如果遇到相同的错误并找到了解决方法还请评论区告知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值