使用Vagrant创建CentOS8虚拟机

377 阅读6分钟

Vagrant是一个快速构建虚拟机的工具,通过简单的几条命令就能快速高效的构建虚拟主机。

安装工具

构建CentOS8虚拟机

这里有常用的镜像下载 app.vagrantup.com/boxes/searc…

由于直接下载系统镜像会很慢,所以我们需要手动下载来添加box

在电脑任意地方新建一个目录vagrant,名字随便取都可以。

终端进入vagrant目录执行以下命令

vagrant init centos/8

会初始化生成一个Vagrantfile文件

image-20210117211225251

然后执行vagrant up命令启动

vagrant up

如果当你执行vagrant up命令后,虚拟机文件下载非常的慢的话,可以使用手动下载系统的方式

在终端日志可以找到下载地址

Downloading: https://vagrantcloud.com/centos/boxes/对应的系统和版本路径

我们可以使用迅雷或其他的下载工具下载,然后讲下载的文件复制到刚刚创建的vagrant目录下,并重命名为centos8.box,删除vagrant目录下其他的文件和目录,包括隐藏的.vagrant目录

image-20210117212844803

然后执行

vagrant box add --name 'centos/8' centos8.box

当看到box:Successfully added box 'cents/8' (v0) for 'airtualbox' ! 表示添加成功

添加成功后接着执行初始化命令

vagrant init centos/8
image-20210117212914823

初始化成功后执行启动命令

vagrant up
image-20210117213225123

创建成功,我们可以一开始安装的VirtualBox工具查看状态(其他的是我以前创建的)

image-20210117213401558

连接虚拟机

  • 直接连接

    vagrant ssh
    
    image-20210117213845526
  • 通过第三方工具连接(推荐)

    这里我是用国产的FinalShell

    在我们创建的vagrant目录下会生成 .vagrant目录,这个目录默认是隐藏,在里面找到private_key文件,这个是登录的私钥

    image-20210117214326322

    使用FinalShell导入私钥和填写信息

    image-20210117214914265

    连接成功

    image-20210117215006226

Vagrant常用命令

命令解释
vagrant box list查看目前已有的box
vagrant box add新增加一个box
vagrant box remove删除指定box
vagrant init初始化配置vagrantfile
vagrant up启动虚拟机
vagrant sshssh登录虚拟机
vagrant suspend挂起虚拟机
vagrant resume恢复虚拟机
vagrant reload重启虚拟机
vagrant halt关闭虚拟机
vagrant status查看虚拟机状态
vagrant destroy删除虚拟机

共享目录

Vagrant的根目录(就是我们一开始创建的vagrant)和虚拟机里的/vagrant目录是共享的。我们在vagrant目录下新建一个hello.txt文件,内容为Hello Code:

image-20210117220104981

执行vagrant reload 重启查看日志

image-20210117220425252

然后连接虚拟机,查看虚拟机/vagrant目录下有什么内容:

image-20210117220533949

说明同步成功。

我们也可以自定义共享路劲,编辑vagrant文件夹下的Vagrantfile文件:

image-20210117220659198

在这行下面添加如下配置:

config.vm.synced_folder "./data", "/share", create:true, owner: "root", group: "root"

这个配置的意思是将当前路径下的data文件夹和虚拟机的/share目录共享,拥有者为root,群组为root,如果路径不存在则创建。

修改了Vagrantfile文件需要执行 vagrant reload重启。

在这途中,遇到了如下问题:

Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem “vboxsf” is not available. This filesystem is made available via the VirtualBox Guest Additions and kernel module. Please verify that these guest additions are properly installed in the guest. This is not a bug in Vagrant and is usually caused by a faulty Vagrant box. For context, the command attempted was

The error output from the command was: mount: unknown filesystem type ‘vboxsf’

安装下面这个插件可解决问题:

vagrant plugin install vagrant-vbguest

网络配置

虚拟机私有网络

在Vagrantfile里打开下面这行配置:

image-20210117221155832

然后使用命令vagrant reload重启虚拟机,重启后我们使用ping命令看是否可以在Mac上访问到这个ip:

image-20210117221340108

访问成功,连接虚拟机,使用if addr查看其IP:

image-20210117221501535

正是我们刚刚配置的那个IP。

虚拟机公有网络

编辑Vagrantfile,将我们刚刚开启的私有网络配置注释,然后开启下面这行配置:

image-20210117221625491

然后重启虚拟机,重启过程中会然你根据当前网络环境选择:

image-20210117221838378

因为我电脑连接的是wifi所以选择第一个选项,重启好后连接虚拟机,查看其IP:

image-20210117222011891

ping 一下试试:

image-20210117222111222

公有网络和私有网络的区别是,公有网络是无线路由器自动分配的IP地址,并且在同一个wifi网络下的其他设备也是可以访问这个IP地址的。

多主机配置

创建多台主机

使用Vagrant可以轻松地创建多台虚拟主机。下面我们开始通过Vagrant来创建两台新的虚拟主机“prod”和“dev”。

在vagrant目录下新建一个目录,名称为multi,然后通过现有的box来初始化一个Vagrantfile配置:

image-20210117222532141

接着编辑multi目录下的Vagrantfile文件,新增下面两项配置:

config.vm.define "prod" do |prod|
end

config.vm.define "dev" do |dev|
end
image-20210117222843321

执行vagrant status查看状态

image-20210117222910627

可以看到多了两台状态为not created的虚拟机,名称分别为“prod”和“dev”。

我们可以使用vagrant up来启动两台主机,也可以通过vagrant up prod来单独启动“prod”这台虚拟主机。

启动后(第一次启动耗时可能比较长),使用vagrant status来查看它们的状态:

image-20210117223212590

通过vagrant ssh 主机名就可以连接上它们了。

image-20210117223244161

网络配置

接下来开始配置网络,让它们之间可以通讯。

我们按照上面介绍网络配置的方式来为这两台虚拟主机配置私有网络:

image-20210117223516002

值得注意的是,在配置私有网络的时候,IP网段不能和Mac主机相同。

配置好后重启这两台虚拟机,然后分别连接这两台虚拟机,看是否能够ping通:

image-20210117223847018 image-20210117223933347

配置成功。

自定义主机名

编辑Vagrantfile,添加如下配置:

重启后,连接虚拟机,可以看到hostname已经修改为我们设置的名称了:

image-20210117224041336

重启后,连接虚拟机,可以看到hostname已经修改为我们设置的名称了:

image-20210117224306327 image-20210117224333130

多主机的共享目录

默认的这两台虚拟主机的/vagrant和当前目录multi/是共享的。我们也可以分别为它们设置不同的共享目录。

编辑Vagrantfile,添加如下配置:

image-20210117224350262

prod目录和dev目录要在Mac的multi目录下手动创建

然后重启这两台虚拟主机就好了。

更多Vagrant的配置可以查看官方文档:www.vagrantup.com/docs/

配置文件

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

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|

  config.vm.box = "centos/8"

  config.vm.define "prod" do |prod|
    prod.vm.network "private_network", ip: "192.168.33.11"
    prod.vm.hostname = "codelong-prod"
    prod.vm.synced_folder "prod", "/vagrant"
  end

  config.vm.define "dev" do |dev|
    dev.vm.network "private_network", ip: "192.168.33.12"
    dev.vm.hostname = "codelong-dev"
    dev.vm.synced_folder "dev", "/vagrant"
  end

end