vagrant简介 (在virtualBox上安装虚拟机centos7) 创建和部署虚拟化开发环境

参考1
参考2

1. 什么是vagrant?

简单理解,就是可以通过Vagrant这个工具管理虚拟机,比如说想创建一个centos环境的虚拟机,不需要安装系统这么麻烦,通过vagrant可以快速创建

官方网址

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。我们可以使用它来干如下这些事:

建立和删除虚拟机
配置虚拟机运行参数
管理虚拟机运行状态
自动配置和安装开发环境
打包和分发虚拟机运行环境

Vagrant的运行,需要依赖某项具体的虚拟化技术,最常见的有VirtualBox以及VMWare两款,早期,Vagrant只支持VirtualBox,后来才加入了VMWare的支持。

为什么我们要选择Vagrant呢?因为它有跨平台、可移动、自动化部署无需人工参与等优点。

在这里插入图片描述
在Vagrant体系中,有个box(箱子)的概念,这优点类似于docker体系中的image(镜像)。基于同一个box,不同的人可以运行得到相同的内容。这个我们下文再详细说。

2. 安装虚拟机 vitualbox

使用vagrant首先需要安装虚拟机vitualbox(virtualbox),vitualbox安装这里就不介绍了。也可以使用vmware,不过vagrant+vmware是要收费的。

2. 安装vagrant

去vagrant官网下载(vagrantup),根据系统选择安装版本,我这里选择的是windows 64位

3. 使用vagrant创建centos7

在这里插入图片描述

从vagrant首页“Find Boxes”进入,如下图,可以看到很多Vagrant Boxes,我现在需要的是centos7环境,找到对应centos/7 vagrant box进入

在这里插入图片描述

centos/7 vagrant box详情页中有使用说明,如下:

在这里插入图片描述
在本地创建一个目录用来存放centos7,我的目录是:D:\VirtualBox\centos7

打开powershell ,cd到centos7目录

执行命令:vagrant init centos/7 (初始化配置vagrantfile)

vagrant init centos/7

此命令会在当前目录下生成一个Vagrantfile文件
在这里插入图片描述
执行命令:vagrant up (启动虚拟机)

vagrant up 

在这里插入图片描述
然后就等待下载安装咯,安装速度有点慢,毕竟是国外网络

安装成功后,可以在vitualbox中的虚拟机列表看到新安装的虚拟机
在这里插入图片描述

使用命令登录:vagrant ssh

vagrant ssh

当然也可以用其他第三方的连接工具。

默认登录进去的是 vagrant 用户。

所以执行有些命令的时候需要加 sudo,或者切换到 root 用户:

su root

默认 root 用户的密码为:vagrant

安装过程中遇到的问题

1.vagrant up 下载速度太慢,解决方法:

下载链接 https://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

加载下载的镜像

cd 到下载好的文件目录
命令:

vagrant box add centos/7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

重新加载镜像

vagrant up

还可以设置第三方镜像

下面的地址中下载你想要的镜像:

http://www.vagrantbox.es/

2.Vagrant up 出错,提示字符集不兼容?

在这里插入图片描述

D:/Program Files/Vagrant/embedded/gems/2.2.19/gems/childprocess-4.1.0/lib/childprocess/windows/process_builder.rb:48:in `join': incompatible character encodings: GBK and UTF-8 (Encoding::CompatibilityError)

原因是 windows用户名为中文

到VM VirtualBox > 管理> 全局设定里修改了默认虚拟机位置为无中文路径时,再去vagrant up即成功了
在这里插入图片描述
成功
在这里插入图片描述
在这里插入图片描述

3. Vagrant 使用中发生的 Permission denied publickey

vagrant@127.0.0.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 错误

找到初始化目录下的 private_key 文件

在这里插入图片描述

右键->属性->安全->高级

新增当前用户完全控制权限

删除其他没用的权限,可以直接禁用继承达到效果

参照 https://blog.csdn.net/ai_0922/article/details/106366521

权限修改成下面这样了之后点击 应用 -> 确定 就完成了
在这里插入图片描述

我自己的问题是 wind10家庭版,没有策略组功能,同时又是安装在移动硬盘里面,后来安装到原生的硬盘里面,同时添加策略组功能就行
在这里插入图片描述

4.Win10家庭版组策略打开方法

新建一个txt文档,复制下面命令,改为cmd,再用管理员权限运行

@echo off

pushd "%~dp0"

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"

pause

在运行–gpedit.msc启动组策略,成功了,如下图所示
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

改为禁用
在这里插入图片描述

4. 以下是vagrant常见命令:

vagrant box list 查看目前已有的box
vagrant box add 新增加一个box
vagrant box update 更新指定box
vagrant box remove 删除指定box
vagrant box repackage 重新打包本地环境中指定的box

vagrant init 初始化配置vagrantfile
vagrant up 启动虚拟机
vagrant ssh ssh登录虚拟机
vagrant suspend 挂起虚拟机
vagrant reload 重启虚拟机
vagrant halt 关闭虚拟机
vagrant status 查看虚拟机状态
vagrant destroy 删除虚拟机

5. Vagrant高级功能

私有网络配置 防止映射的端口和应用端口不一致

默认情况下,VirtualBox 使用的是网络地址转换和端口转发的方式实现了本地系统和虚拟机地址的问题,如下图所示。
在这里插入图片描述
在实际使用过程中,对我们可能不太方便。

举个例子,比如我们的虚拟机中装了很多东西,比如 MySQL 数据库,Redis 等等,在虚拟机内部是没有问题的,MySQL 数据库的端口默认是 3306,虚拟机可能给我们映射出来的端口就可能不是 3306 了,这对于我们再本机器的进行测试是及其不方便的。

因此,我们不使用这种默认的方式,我们可以设置一个私有的 ip 实现本地系统和虚拟机系统之间的互通。(见下面的私有网络配置)

打开 cmd 输入:

ifconfig -a

找到 VirtualBox 的虚拟网卡地址:

我的是:192.168.56.2

编辑 Vagrantfile 文件,找到如下一行,去掉注释并修改 ip 为:

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

其中 192.168.56 是固定的,10 也可以换成其他的,最大不要超过 255 就可以了!

重新加载配置文件,并重启 vagrant:

vagrant reload

启动完成后,本地系统和虚拟机之间相互 Ping ,如果没有问题,说明网络配置就好了!

例如,在虚拟机中 ping 本地的地址为:

ping 192.168.1.103

在本地 Ping 虚拟机的 ip (刚才配置文件中配置的那个 IP)

ping 192.168.56.10

5.1. 关于端口转发的配置方式有以下两种:

挂起虚拟机后,在virtualbox的设置里配置转发规则(缺点是:每次通过vagrant reload命令重启虚拟机以后失效)

首先打开VirtualBox管理器:
在这里插入图片描述
然后设置转发规则:
在这里插入图片描述
添加对应的转发规则,然后点击OK保存,再使用命令vagrant up启动虚拟机。

注意:一定不能使用vagrant reload命令,否则启动后规则丢失无效。

vagrant up

在vagrant的配置文件Vagrantfile里配置转发规则(永久有效,重启不会丢失)

在配置文件里增加以下配置:

config.vm.network :forwarded_port, guest: 80, host: 8889
config.vm.network :forwarded_port, guest: 8888, host: 9999

5.2 网络配置

vagrant支持以下三种网络配置:

Forwarded port(端口映射)

是指将宿主计算机的端口映射到虚拟机上的某个端口上,访问宿主计算机的该端口时,请求实际会被转发到虚拟机上指定的端口,配置文件设置语法为:

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

优点:简单、容易理解、容易实现外网访问虚拟机。

缺点:需映射很多端口时较麻烦、不支持在宿主机器上使用小于1024的端口来转发(如:不能使用SSL的443端口来进行https连接)。
官网配置文档地址:https://www.vagrantup.com/docs/networking/forwarded_ports.html

Private network(私有网络)

这种网络配置下,只有主机可以访问虚拟机,如果多个虚拟机设置定在同一个网段也可以相互访问,当然虚拟机也是可以访问外部网络的。配置语法如下:

config.vm.network "private_network", ip: "192.168.50.4" # 固定IP

还可以设置动态IP,配置语法如下:

config.vm.network "private_network", type: "dhcp"

优点:安全,只能自己访问。

缺点:因私有原有,所以其他团队成员不能和你协作。
官网配置文档地址:https://www.vagrantup.com/docs/networking/private_network.html

Public network(公有网络)

这种配置下,虚拟机享受实体机一样的待遇,一样的网络配置,vagrant 1.3版本以后这种配置也支持设定固定IP,配置语法如下:

config.vm.network "public_network", ip: "192.168.50.4"

还可以设置桥接网卡,配置语法如下:

config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

优点:方便团队协作,别人可以访问你的虚拟机。

缺点:需要有网络,有路由器分配IP

官网配置文档地址:https://www.vagrantup.com/docs/networking/public_network.html

5.3 共享目录

有时候,我们希望虚拟机能和我们的主机共享一些文件夹,这时候在vagrant的配置文件中进行配置来达到共享目录的目的。

vagrant的共享目录类型有:

NFS (适用于Mac OS宿主机), 配置语法:
config.vm.synced_folder "/hostPath", "/guestPath", type: "nfs"

官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/nfs.html

RSync , 配置语法:
config.vm.synced_folder "/hostPath", "/guestPath", type: "rsync"

官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/rsync.html

SMB (适用于Windows宿主机), 配置语法:
config.vm.synced_folder "/hostPath", "/guestPath", type: "smb"

官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/smb.html

VirtualBox

如果你的vagrant使用virtualbox的provider,这是默认的共享目录的类型。这些同步文件夹使用ValualBox共享文件夹系统将文件更改从客户机同步到主机,反之亦然。

官网配置文档地址:https://www.vagrantup.com/docs/synced-folders/virtualbox.html

注意:配置完成,我们重新启动虚拟机时发现报错了,这时候别慌,我们给出解决办法传送门。

5.4 虚拟机优化

自定义虚拟机名称
config.vm.provider "virtualbox" do |vb|
    vb.name = "ubuntu-hafiz"
end
自定义虚拟机主机名称
config.vm.hostname="hafiz"
自定义虚拟机内存和CPU
config.vm.provider "virtualbox" do |vb|
  vb.name = "ubuntu-imooc"
  vb.memory = "1024"
  vb.cpus = 2
end

配置好后重启虚拟机,然后进入虚拟机:

使用top命令然后再按1显示当前CPU个数:
在这里插入图片描述

使用free -m命令显示当前虚拟机内存:
在这里插入图片描述

5.5 打包分发

​   当我们基于一个box启动一个虚拟机以后,我们在里面部署了专属自己的环境,那这个时候我们想要把自己的这套配置好的环境共享给别人怎么办呢?答案是将虚拟机打包分发。命令如下:

vagrant package [--output new_box_name]

新生成的box名称是选填的,默认为package.box。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值