虚拟机与管理虚拟机的软件:Vagrant 与 Virtualbox

本文由清尘发表于2019-04-24 17:57最后修改于2019-04-25属于技术文档分类

使用场景:

1.比如你使用windows系统,想要学习一下linux系统,就可以使用virtualbox + vagrant 快速搭建一个linux系统。
2.比如你需要在本地搭建开发测试环境,也可以使用vagrant 快速拉取一个centos的box搭建一个干净的开发测试环境。 并且可以和本机同步共享目录,就可以在本机上面进行项目开发,在干净的linux环境下面运行项目。

Virtualbox下载: https://www.virtualbox.org/
Vagrant下载: https://www.vagrantup.com/

安装好vagrant之后可以使用终端查看一下已经有的box列表

vagrant box list

可以去网站搜索一下需要的box(类似docker里面的镜象), vagrant box: https://app.vagrantup.com/boxes/search

安装box(搜索到的box的名称,例如centos/7)

vagrant box add centos/7

选择你使用的虚拟机软件的类型,比如 virtualbox 后,开始下载box

(如果下载比较慢,也可以复制下载地址使用迅雷等进下载)

如果你使用了迅雷等下载好了一个box,需要手动安装一下下载的box(在上一步用命令行工具下载的跳过此步骤):

进入到下载好的box的目录执行

vagrant box add centos-test virtualbox.box(下载的box的名字)

删除一个box

vagrant box remove centos-test

进入到项目目录初始化一个vagrant

vagrant init centos/7

虚拟机网络设置

会自动生成一个Vagrantfile文件
打开这个文件可以看到网络配置,去掉前面的#号

......
# config.vm.network "private_network", ip: "192.168.33.10"
# config.vm.network "public_network"
......

共享的目录设置

默认情况下,vagrant 会共享我们的项目的目录,也就是,在项目的虚拟机里面,会有一个目录跟我们的项目的目录是同步的。这样我们可以在本地的电脑上,去编辑项目的文件,然后在虚拟机,可以运行它们。

配置共享目录

如果你有额外的目录要跟虚拟机同步的话,可以通过修改 Vagrantfile 这个文件,去添加这些额外的共享目录 …
找到 config.vm.synced_folder … 虚拟机的同步目录的相关配置 …
去掉这行代码前面的注释符号 … 可以让这行代码起作用。
这个配置后面有两个参数,第一个参数是主机上的目录,可以使用绝对的位置,也可以使用相对的位置,如果是相对位置,是相对于项目根目录的位置,也就是相对于 Vagrantfile 这个文件所在的目录的位置。两个参数之间是一个逗号,第二个参数是在虚拟机上的目录,如果你设置的目录在虚拟机上不存在,Vagrant 在启动虚拟机的时候,会自动去创建这个目录。

/vagrant_data ,表示根目录下面的 vagrant_data 这个目录 …

config.vm.synced_folder "app", "/vagrant"

另外,还有一些选项,输入一个逗号 … 然后把 create,设置成 true … 这样电脑上的这个同步的目录不存在的话,就会创建一个 ..

再输入一个逗号 … 我们还可以设置一下这个目录在虚拟机上的拥有者,还有所属的群组 …

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

例:window下使用nfs设置共享目录双向同步文件

安装agrant-winnfsd插件

vagrant plugin install vagrant-winnfsd

修改Vagrantfile文件,映射项目根目录的上级www目录到虚拟机的www/wwwroot目录(默认的项目目录已经是共享到虚拟机的vagrant目录上了,另外增加的共享目录最好不要放到项目初始化的目录中,不然文件也会同步到虚拟机的vagrant目录上,会重复同步了一份)

Vagrant.configure("2") do |config|
  #winfsd
  config.winnfsd.logging = "on"
  config.winnfsd.uid = 1
  config.winnfsd.gid = 1
  config.vm.synced_folder "../www", "/www/wwwroot", type: "nfs"

保存之后启动vagrant(重启虚拟机是vagrant reload )

其它设置可以看官方文档:https://www.vagrantup.com/docs/virtualbox/configuration.html

修改内存和CPU

config.vm.provider "virtualbox" do |v|
  v.memory = 2024
  v.cpus = 2
end
vagrant up
vagrant status

登录到这个虚拟机

vagrant ssh

要换到root用户,密码是vagrant

su root

查看一下ip地址

ip addr

可以看到192.168.33.10是一个私有网络,还有一个共有网络的IP,可以用终端ping一下

管理虚拟机

退出

exit

停止虚拟机(会关掉虚拟机)

vagrant halt

暂停虚拟机(会保存虚拟机状态)

vagrant suspend

启动虚拟机

vagrant up

销毁一个虚拟机

vagrant destroy