快速搭建虚拟机环境

用过VMware或者VirtualBox安装虚拟机之后,深感操作麻烦,容易出错。。。

有没有类似于docker这样的工具,只要配置好docker-compose.yml这个文件,就可以帮我搭建出一套需要的环境?

Vagrant就是这样的工具!

以下基于win10系统操作,生成CentOS虚拟机(Vagrant也有mac版),当然也可以生成Ubuntu、Debin等虚拟机。

安装工具

  • VirtualBox(选择active maintenance版本就好)
  • Vagrant(win的选择msi,mac的选择dmg)

下载并安装它们。如果Vagrant安装到了其它目录,把安装目录下的bin目录配置到系统环境变量中。

为了不让Vagrant和VirtualBox占用太多的系统盘:

  • 打开VirtualBox的管理界面,选择菜单栏上的管理->全局设定->默认虚拟电脑位置,在这里改成其它的非系统盘位置
  • 在系统环境变量中加入VAGRANT_HOME,设置.vagrant.d目录保存到其它非系统盘位置(如果是想通过命令操作,win可以通过管理员打开pw,执行setx VAGRANT_HOME “xxpath” /M)

打开powershell(可以在任务栏的搜索框中搜索;或者任意目录下,鼠标不要点击文件,按住shift+鼠标右键,就可以选择powershell进入),执行以下命令:

PS C:\Users\lh_dd> vagrant -v
Vagrant 2.2.6

如果输出了对应版本,说明你的vagrant安装成功了。

后续操作遇到问题,请查看错误处理小节内容。

创建虚拟机

创建一个目录并进入:

PS E:\VagrantMachine\Centos8> vagrant init centos/8
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 init centos/8,表示将会创建一个基于CentOS8的虚拟机,如果希望创建其它的系统,参考init语法boxes文档boxes平台

命令执行完成之后,会生成一个Vagrantfile文件在这个目录。

PS E:\VagrantMachine\Centos8> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/8' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'centos/8'
    default: URL: https://vagrantcloud.com/centos/8
==> default: Adding box 'centos/8' (v1905.1) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/centos/boxes/8/versions/1905.1/providers/virtualbox.box
    default: Download redirected to host: cloud.centos.org
==> default: Waiting for cleanup before exiting...

在国内下载box镜像会比较慢,由于跑去下载default: Downloading:后面这个url的资源,所以我们可以ctrl+c中断它,用其它专业的下载工具来下载会快很多。

把这个centos8的box下载好之后,继续:

PS E:\VagrantMachine\Centos8> vagrant box add centos/8 E:\HashiCorp\VagrantBox\CentOS-7-x86_64-Vagrant-1905_01.VirtualBox.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos/8' (v0) for provider:
    box: Unpacking necessary files from: file:///E:/HashiCorp/VagrantBox/CentOS-7-x86_64-Vagrant-1905_01.VirtualBox.box
    box:
==> box: Successfully added box 'centos/8' (v0) for 'virtualbox'!
PS E:\VagrantMachine\Centos8> vagrant box list
centos/8 (virtualbox, 0)
PS E:\VagrantMachine\Centos8>

box add命令格式通常是:vagrant box add 自定义box名称 本地的box资源path。

把box添加成功之后,通过up的方式会给我们完成安装:

PS E:\VagrantMachine\Centos8> vagrant up
PS E:\VagrantMachine\Centos8> 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`.
PS E:\VagrantMachine\Centos8> vagrant ssh
[vagrant@localhost ~]$ whoami
vagrant
[vagrant@localhost ~]$ exit
PS E:\VagrantMachine\Centos8> vagrant halt

首次执行vagrant up,会去创建虚拟机,执行成功就创建好虚拟机了,可以在VirtualBox中看到这个虚拟机!

常用vagrant命令

  • vagrant up // 启动虚拟机,如果虚拟机没有创建则会去创建

  • vagrant status // 查看虚拟机的状态

  • vagrant ssh [虚拟机名称] // 通过ssh连接虚拟机,用户是vagrant;如果只有一台虚拟机可以不指定虚拟机名称

  • vagrant halt // 关闭虚拟机

更多的命令查看vagrant help,或者参考文档

配置虚拟机

  • 配置ip

  • 共享本地文件

在Vagrantfile文件中查找以下配置并设置:
config.vm.network “private_network”, ip: “自定义ip”
config.vm.synced_folder “本地文件目录”, “虚拟机中目录”

配置完成之后重新启动虚拟机就好!

进入虚拟机我们就看到成功的配置了这个ip,然后在本地也是可以正常ping通这个ip的。

我们在本地共享目录下新增文件,在虚拟机的映射目录也是能看到新增文件的,反过来一样,说明这个共享是成功的。

共享文件不需要通过samba的方式就实现了,也是很方便。

虚拟机有了ip地址之后,就可以通过xshell之类的ssh工具连接了,不会的可以参考这篇文章操作。

如果共享文件不生效,则进行如下操作:

  1. 先关闭虚拟机vagrant halt
  2. 在VitrualBox的工具界面的设置->存储,把VitrualBox安装目录下的VBoxGuestAdditions.iso给挂载进来
  3. 启动虚拟机vagrant up
  4. 执行以下命令:
[vagrant@centos-node1 ~]$ sudo mount /dev/cdrom /media/cdrom/
[vagrant@centos-node1 ~]$ cd /media/cdrom/
[vagrant@centos-node1 cdrom]$ sudo yum install kernel-devel elfutils-libelf-devel -y
[vagrant@centos-node1 cdrom]$ sudo ./VBoxLinuxAdditions.run
[vagrant@centos-node1 cdrom]$ cd ~
[vagrant@centos-node1 ~]$ sudo umount -v /media/cdrom

退出重启虚拟机就好。

如果想多创建一台或者多台机器,怎么办?

这里给个参考

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [
    {
       :name => "name1", # 虚拟机名称 可以再VirtualBox中看到
       :eth1 => "ip1", # ip地址
       :mem => "1024", # 内存大小 这里配置的是1G 根据需要配置
       :cpu => "1", # cpu核数
    },
    {
       :name => "name2",
       :eth1 => "ip2",
       :mem => "1024",
       :cpu => "1"
    },
    # 以上配置会创建2台虚拟机,需要更多可以再配置
]

Vagrant.configure(2) do |config|

  config.vm.box = "centos/8"
  # config.vm.box_version = "2004.01" # 如果是本地的vbox 这里要注释掉 否则还是会跑去下载vbox资源!

  boxes.each do |opts|
      config.vm.define opts[:name] do |config|
        config.vm.hostname = opts[:name]
        config.vm.provider "vmware_fusion" do |v|
          v.vmx["memsize"] = opts[:mem]
          v.vmx["numvcpus"] = opts[:cpu]
        end

        config.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--memory", opts[:mem]]
          v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
        end

        # ip
        config.vm.network :private_network, ip: opts[:eth1]
        # 文件共享
        config.vm.synced_folder "本地目录", "虚拟机中目录"
      end
  end
end

更多的配置参数,请看文档

错误处理

  • vagrant up卡住,提示:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile

  • base: mirrors.cqu.edu.cn
  • extras: mirrors.cqu.edu.cn
  • updates: mirrors.cqu.edu.cn

此时可以不必等待,按ctrl+c强制中断,然后通过vagrant ssh直接连进去操作

[vagrant@localhost ~]$ sudo rm -f /var/run/yum.pid
[vagrant@localhost ~]$ sudo yum -y update

小建议

如果感觉国外的yum源下载速度慢,可以替换成国内的163腾讯阿里等等yum源。

posted @ 2022-09-26 19:19  笑笑霸  阅读(133)  评论(0编辑  收藏  举报