使用Vagrant创建CentOS虚拟机
Vagrant是一款由HashiCorp公司提供的,用于快速构建虚拟机环境的软件。本节我们将使用Vagrant结合Oracle VM VirtualBox快速地在win10环境下构建CentOS7虚拟机。在此之前需要先安装好 Vagrant 和 VirtualBox。
构建CentOS7虚拟机
- 在https://app.vagrantup.com/boxes/search下搜索centos:
- 在win10任意盘符下创建 vagrant_vm 目录(注意目录最好不要有中文和空格),然后在该目录下使用cmd执行命令:
vagrant init centos/7
- 执行 vagrant up 启动(这时候最好提前打开VirtualBox),然后会出现以下界面,一直等待完成后即可,在完成后,会在 VirtualBox 的列表里会出现一台正在运行的虚拟机:
- 在上面的安装过程中我们会发现,过程非常的缓慢,我们可以用以下的方式加速:
在上面的日志中可以找到这么一行:
Downloading: https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box
后面这个URL就是下载地址了,将它黏贴到迅雷等下载工具下载即可。然后将下载好后的xxx.box文件复制到 vagrant_vm 目录下,并且重命名为 centos7.box(删除centos7.box之外的文件和目录,只保留centos7.box一个文件)
接着在vagrant_vm下运行命令,导入已存在的镜像(box文件):
vagrant box add centos/7 centos7.box
初始化box,接着执行命令:
// 注意此处的名称和上方保持一致
vagrant init centos/7
初始化成功后执行命令启动:
vagrant up
构建成功,效果和一开始在线下载构建是一样的。
常见的几个vagrant命令
- vagrant status
查看虚拟机状态信息
- vagrant halt
关闭已经启动的虚拟机
- vagrant up
启动虚拟机
- vagrant suspend
暂停虚拟机,会保存暂停之前的状态
- vagrant resume
恢复暂停之后的虚拟机
- vagrant reload
重新启动虚拟机
- vagrant destroy
销毁已经创建的虚拟机
- vagrant ssh
命令行的模式链接虚拟机
远程工具连接虚拟机
在使用 vagrant ssh 的实际操作中发现,可能会出现如下的错误:
在 Google上找了很多方法,说是 private key 文件的权限问题,但是都没有解决,后面直接使用ssh连接工具连接成功,具体的操作如下图:
1. 先普通用户登陆
2. 配置root用户登陆
使用 vagrant 用户登陆成功后,可以使用下方命令切换到root用户
su root
// 密码
vagrant
但是这样还是不能直接使用root用户登陆,需要以下的操作:
首先以默认身份登录,切换到root用户后,并修改 sshd 配置文件:
vim /etc/ssh/sshd_config
做如下变动
# PermitRootLogin prohibit-password
PermitRootLogin yes # 允许 root 身份登录
# PasswordAuthentication on
PasswordAuthentication yes # 可以使用密码登录
重启 sshd 服务
systemctl restart sshd
然后使用 vagrant reload 命令直接重启虚拟机,这时我们就可以直接使用 root/vagrant 登陆了。
目录共享
Vagrant的根目录(就是我们一开始创建的vagrant_vm)和虚拟机里的/vagrant目录是共享的。当我们在 vagrant_vm 新建一个文件时,在虚拟机/vagrant的目录也有同样的内容
自定义共享
- 共享目录配置
config.vm.synced_folder
"your_folder"(必须) //物理机目录,可以是绝对地址或相对地址,相对地址是指相对与vagrant配置文件所在目录
,"vm_folder(必须)" // 挂载到虚拟机上的目录地址
,create(boolean)--可选 //默认为false,若配置为true,挂载到虚拟机上的目录若不存在则自动创建
,disabled(boolean):--可选 //默认为false,若为true,则禁用该项挂载
,owner(string):'www'--可选 //虚拟机系统下文件所有者(确保系统下有该用户,否则会报错),默认为vagrant
,group(string):'www'--可选 //虚拟机系统下文件所有组( (确保系统下有该用户组,否则会报错),默认为vagrant
,mount_options(array):["dmode=775","fmode=664"]--可选 //dmode配置目录权限,fmode配置文件权限 默认权限777
,type(string):--可选 //指定文件共享方式,例如:'nfs',vagrant默认根据系统环境选择最佳的文件共享方式
- 安装vbguest插件
为防止挂载失败,提示如下图 because the filesystem "vboxsf" is not available 的问题,提前执行该命令安装插件
安装如下的插件即可解决:
vagrant plugin install vagrant-vbguest
关闭更新和下载
config.vbguest.auto_update = false #防止重新安装更新
config.vbguest.no_remote = true #不从远程web端下载
- 挂载共享目录
编辑vagrant_vm文件夹下的Vagrantfile文件:
在这行下面添加如下配置:
config.vm.synced_folder ".","/vagrant",disabled:true # 禁用vagrant的默认共享目录,不然有可能挂载失败
config.vm.synced_folder "./data", "/vagrant_data", create:true, owner: "root", group: "root"
配置的意思是将当前路径下的data文件夹和虚拟机的/vagrant_data,拥有者为root,群组为root,如果路径不存在则创建。
修改了Vagrantfile文件需要执行 vagrant reload 重启。重启后我们在data文件夹下新建一个 test.txt 文件,然后连接虚拟机看看是否共享成功
然后再次重启,连接虚拟机去查看/vagrant_data目录下是否共享成功
网络配置
虚拟机私有网络
在 Vagrantfile 中开启网络的配置信息:
然后使用命令vagrant reload重启虚拟机,重启后我们使用ping命令看是否可以在windows*问到这个ip:
连接虚拟机,使用 ip addr 查看其IP:
虚拟机公有网络
编辑Vagrantfile,将我们刚刚开启的私有网络配置注释,然后开启下面这行配置:
然后重启虚拟机,重启过程中会让你根据当前网络环境选择:
此处显示我的网络适配器的选项是 2,所以此处我输入了 2,重启好后连接虚拟机,查看其IP:
公有网络和私有网络的区别是,公有网络是无线路由器自动分配的IP地址,并且在同一个wifi网络下的其他设备也是可以访问这个IP地址的。