当前位置: 代码迷 >> 综合 >> VirtualBox 和 vagrant在windows下的使用
  详细解决方案

VirtualBox 和 vagrant在windows下的使用

热度:85   发布时间:2023-10-16 21:14:55.0

 下载安装 VirtualBox:Downloads – Oracle VM VirtualBox

下载安装 Vagrant :Downloads | Vagrant by HashiCorp

下载需要使用的 box :比如:xxx.box  后缀是.box

注意:有时下载版本不同会有冲突的,最好的是安装 VirtualBox 和 Vagrant 最新版本,这样防止的出现冲突的情况

VirtualBox 和 vagrant在windows下的使用

VirtualBox 和 vagrant在windows下的使用 注意:安装 Vagrant

Vagrant 是没有图形界面的,所以安装完成后也没有桌面快捷方式。具体使用方法,接下来会详细说明。

Vagrant 的安装程序会自动把安装路径加入到 PATH 环境变量,所以,这时候可以通过命令行执行 vagrant version 或者vagrant -v 检查是否安装成功:

看到图下,证明安装成功了

VirtualBox 和 vagrant在windows下的使用

配置虚机存放位置

创建虚拟机会占用较多的磁盘空间,在 Windows 系统下默认的虚机创建位置是在 C 盘,所以最好配置到其它地方。

配置 VirtualBox

启动 VirtualBox 后,通过菜单 管理 -> 全局设定,或者按下快捷键 Ctrl + g,在全局设定对话框中,修改 默认虚拟电脑位置,指定一个容量较大的磁盘。

VirtualBox 和 vagrant在windows下的使用

配置 Vagrant

先查看本地是否有镜像存在

命令:vagrant box list

$ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.

如下添加一个ubuntu的box;注意ubuntu 名字可以由自己起,只是个名字而已

开始安装镜像

命令:vagrant box add 镜像文件路径(绝对路径) --name ubuntu2

#案例命令vagrant box add E:\U盘\学习资料\box\bionic-server-cloudimg-amd64-vagrant.box --name ubuntu2

再次查询,可以看到有了一个 box:

命令:vagrant box list

VirtualBox 和 vagrant在windows下的使用

Vagrant 基本操作

新建虚机

创建一个目录,然后执行 vagrant init

命令:如下

mkdir demo
cd demo
vagrant init ubuntu2

结果:

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.

 其中的 ubuntu2 就是我们要使用的 box 名字。

这个命令只是为我们生成一个 Vagrantfile,(该文件在刚才你建立的文件demo下),所以,这里的名字没指定或者写错了都没关系,后面会介绍如何编辑这个 Vagrantfile 来修改。

启动虚机

我们等会再来细看这个文件,现在直接按照提示执行 vagrant up

命令:vagrant up

VirtualBox 和 vagrant在windows下的使用

 正常的情况下,不到一分钟应该就能启动成功了

这里我遇到点问题,2222 端口转发出现未知错误,造成 vagrant 的启动超时。检查了这个端口并没被占用,同时更改大一点的端口可以转发成功,所以应该是系统哪里有点问题。在后面我介绍了如何处理,如果你也遇到和我一样的情况,可先跳到下面查看。

注意到这里包含的信息:

  • 虚机名称:demo_default_1588406874156_65036(想改?最后有提)
  • 网卡:Adapter 1: nat,第一块网卡,NAT 模式,这是固定的
  • 端口转发:22 (guest) => 2222 (host) (adapter 1),把虚机的 22 端口,映射到宿主机的 2222 端口上,这样就可以通过 127.0.0.1:2222 访问虚拟机了
  • SSH 用户名:vagrant,这里使用 private key 登录
密码也是  vagrant,但是密码方式仅供直接登录,是不能通过 SSH 登录的。

查看虚机状态

执行下面的命令可以查看虚机的状态:

vagrant status

 VirtualBox 和 vagrant在windows下的使用

连接虚机

如果启动没问题,接下来执行 vagrant ssh 就能以 vagrant 用户直接登入虚机中。

root 用户没有默认密码,也不能直接登录。需要 root 权限的命令可以通过在命令前添加 sudo 来执行,也可以执行 sudo -i 直接切换到 root 用户。

这时候打开 VirtualBox 程序,可以看到自动创建的虚机:

VirtualBox 和 vagrant在windows下的使用

 

 

我们也可以在 VirtualBox 的终端上登录系统,默认的登录用户名和密码都是 vagrant

当然还可以使用其它的 SSH 连接工具例如 XShell,SecureCRT 连接,但是这里默认网卡使用的是 NAT 模式,没有指定 IP,实际应用并不方便,我们在后面介绍网络配置时再详细介绍如何连接虚机。

停止虚机

执行下面的命令可以关闭虚机:

vagrant halt

直接在 VirtualBox 上关闭虚机,或者直接在虚机内部执行 poweroff 命令也都是可以的。

初识 Vagrantfile

先来认识一下默认的 Vagrantfile 文件,使用带语法高亮的文本编辑器(例如 VSCode) 打开:

# -*- 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|# The most common configuration options are documented and commented below.# For a complete reference, please see the online documentation at# https://docs.vagrantup.com.# Every Vagrant development environment requires a box. You can search for# boxes at https://vagrantcloud.com/search.config.vm.box = "ubuntu2"# Disable automatic box update checking. If you disable this, then# boxes will only be checked for updates when the user runs# `vagrant box outdated`. This is not recommended.# config.vm.box_check_update = false# Create a forwarded port mapping which allows access to a specific port# within the machine from a port on the host machine. In the example below,# accessing "localhost:8080" will access port 80 on the guest machine.# NOTE: This will enable public access to the opened port# config.vm.network "forwarded_port", guest: 80, host: 8080# Create a forwarded port mapping which allows access to a specific port# within the machine from a port on the host machine and only allow access# via 127.0.0.1 to disable public access# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"# Create a private network, which allows host-only access to the machine# using a specific IP.# config.vm.network "private_network", ip: "192.168.33.10"# Create a public network, which generally matched to bridged network.# Bridged networks make the machine appear as another physical device on# your network.# config.vm.network "public_network"# Share an additional folder to the guest VM. The first argument is# the path on the host to the actual folder. The second argument is# the path on the guest to mount the folder. And the optional third# argument is a set of non-required options.# config.vm.synced_folder "../data", "/vagrant_data"# Provider-specific configuration so you can fine-tune various# backing providers for Vagrant. These expose provider-specific options.# Example for VirtualBox:## config.vm.provider "virtualbox" do |vb|#   # Display the VirtualBox GUI when booting the machine#   vb.gui = true##   # Customize the amount of memory on the VM:#   vb.memory = "1024"# end## View the documentation for the provider you are using for more# information on available options.# Enable provisioning with a shell script. Additional provisioners such as# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the# documentation for more information about their specific syntax and use.# config.vm.provision "shell", inline: <<-SHELL#   apt-get update#   apt-get install -y apache2# SHELL
end

以上代码只是原次配置文件的东西,只看看看就行了

刨除注释这个文件的实际生效内容实际只有 3 行:

Vagrant.configure("2") do |config|config.vm.box = "centos-7"
end

自定义配置 Vagrantfile

下面我将针对这份默认的 Vagrantfile 内容,逐个讲解其中的配置含义和如何根据实际情况修改。

配置端口转发

端口转发(Port forward)又叫端口映射,就是把虚机的某个端口,映射到宿主机的端口上。这样就能在宿主机上访问到虚拟机中的服务。

例如启动虚机时,默认的 22 (guest) => 2222 (host) (adapter 1) 就是把虚机的 SSH 服务端口(22)映射到宿主机的 2222 端口,这样直接在宿主机通过 ssh 客户端访问 127.0.0.1:2222 端口就等价于访问虚拟机的 22 端口。

配置私有网络

方便我们直接通过ip 可以访问虚拟机上面的代码程序

找到应该的位置 搜索 private_network

VirtualBox 和 vagrant在windows下的使用

取消注释下面一行,就可以为虚机设置指定的私有网络地址:192.168.33.10 这个可以改成你要的ip ,但是需要遵守ip协议有效的 ip

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

 

配置公共网络

下面这条配置用来配置公共网络:

VirtualBox 和 vagrant在windows下的使用

把上面代码去掉 注释,就能支持同一个局域网下能访问虚拟机的网站

配置同步文件夹

把虚拟机的上面的项目文件 与 宿主电脑项目文件互通,代码可以在宿主电脑上面改了,不需要上传到虚拟机上面,就能同步代码

下面的配置项用来配置同步文件夹:

VirtualBox 和 vagrant在windows下的使用

../data 是你本地电脑的路径,最好写绝对路径

以下是我的本地修改的路径   /work  是虚拟机上面的路径

VirtualBox 和 vagrant在windows下的使用

 修改配置了,需要重启虚拟机 vagrant reload 或者先 关闭vagrant halt 再启动 vagrant up

VirtualBox 和 vagrant在windows下的使用

VirtualBox 和 vagrant在windows下的使用

 VirtualBox 和 vagrant在windows下的使用

 

看到三处地方,就知道是否成功了

更改虚机规格

VirtualBox 等虚拟机软件在 Vagrant 中被称为 Provider,虚机的规格等配置是和 Provider 相关的。因为 VirtualBox 用的最多,所以默认的配置提示是以 VirtualBox 举例。

使用 VSCode 时,选中它们,然后按下快捷键 Ctrl + / 即可:

  config.vm.provider "virtualbox" do |vb|# Display the VirtualBox GUI when booting the machinevb.gui = true# Customize the amount of memory on the VM:vb.memory = "1024"end

vb.gui = true 是在虚机启动时自动打开 VirtualBox 的图形界面,这对服务器来说没什么用,直接删掉。

添加 CPU 的配置,同时修改内存大小:

  config.vm.provider "virtualbox" do |vb|vb.cpus = 2vb.memory = 2048end

 我本地的结果图

VirtualBox 和 vagrant在windows下的使用

 配置可以根据你本地的电脑改

这样就配合一个 虚拟机的服务器

下面根据你项目是什么代码,就搭建什么环境,php运行环境----比较快的方式,推荐安装宝塔

VirtualBox 和 vagrant在windows下的使用

 这是php运行的界面 

 

 

  相关解决方案