热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

virtualbox+vagrant学习1环境安装及vagrantfile的简单配置Mac系统

在学习docker-machine时,发现需要使用到虚拟化平台,所以选择了使用virtualBox。

然后后面发现需要使用vagrant来在mac系统中作为虚拟机管理软件,所以下面将会简述我自己学习使用它们的过程:

 

1.virtualbox下载和安装

首先到官网讲virtualbox下载并安装:

https://www.virtualbox.org/wiki/Downloads

virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统

安装步骤很简单,就一路继续即可

同时会把VBoxManage安装下来,查看VBoxManage版本:

userdeMBP:~ user$ VBoxManage -v
5.2.22r126460

VBoxManage是VirtualBox的命令行接口。可以使用它在主机操作系统的命令行中完全地控制VirtualBox

 

2.什么是vagrant

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。

Vagrant的运行是需要依赖某个虚拟化平台的,如上面安装的virtualBox

它可以实现的功能有:

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

在Vagrant体系中,有个box(箱子)的概念,这点类似于docker体系中的image(镜像)。基于同一个box,不同的人可以运行得到相同的内容

 

1)下载并安装

https://www.vagrantup.com/downloads.html (选择的是macOS的64位版本)

安装步骤也很简单,一路继续即可

安装好后查看其版本号:

userdeMBP:~ user$ vagrant -v
Vagrant 2.2.2

 查看所有可用命令:

userdeMacBook-Pro:~ user$ vagrant -h
Usage: vagrant [options]  []

    -v, --version                    Print the version and exit. 打印版本并退出
    -h, --help                       Print this help. 打印帮助信息

Common commands:
     box             manages boxes: installation, removal, etc. 管理boxes:安装、移除等操作
     cloud           manages everything related to Vagrant Cloud 管理与vagrant云相关的所有操作
     destroy         stops and deletes all traces of the vagrant machine 停止并删除所有对vagrant机器的追踪
     global-status   outputs status Vagrant environments for this user 输出该用户的vagrant机器的状态
     halt            stops the vagrant machine 停止vagrant机器
     help            shows the help for a subcommand 显示某个子命令的帮助信息
     init            initializes a new Vagrant environment by creating a Vagrantfile 通过创建一个Vagrantfile文件来初始化一个新的vagrant环境
     login           
     package         packages a running vagrant environment into a box 将运行中的环境打包成一个box
     plugin          manages plugins: install, uninstall, update, etc. 管理插件:安装、卸载、更新等操作
     port            displays information about guest port mappings 显示客户端口映射的信息
     powershell      connects to machine via powershell remoting 通过powershell远程连接机器
     provision       provisions the vagrant machine 供应vagrant机器
     push            deploys code in this environment to a configured destination 在这个环境下部署代码到想要配置的目标上
     rdp             connects to machine via RDP 通过RDP连接机器
     reload          restarts vagrant machine, loads new Vagrantfile configuration 重启vagrant机器,下载新的Vagrantfile文件配置信息
     resume          resume a suspended vagrant machine 恢复挂起的vagrant机器
     snapshot        manages snapshots: saving, restoring, etc. 管理快照:保存、恢复等
     ssh             connects to machine via SSH 通过SSH连接机器
     ssh-config      outputs OpenSSH valid configuration to connect to the machine 输出OpenSSH有效配置去连接机器
     status          outputs status of the vagrant machine 输出vagrant机器的状态
     suspend         suspends the machine 挂起机器
     up              starts and provisions the vagrant environment 开启并供应vagrant环境
     upload          upload to machine via communicator 通过通信器上传至机器
     validate        validates the Vagrantfile 验证Vagrantfile文件
     version         prints current and latest Vagrant version 打印当前和最新的vagrant版本
     winrm           executes commands on a machine via WinRM 通过WinRM执行机器上的命令
     winrm-config    outputs WinRM configuration to connect to the machine 输出WinRM配置去连接机器

 

查看现在本机上所拥有的box:

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

意思就是我还没有下载任何的box(其实就像是docker中你还没有pull任何的image,所以你运行docker images是什么都没有的状态)

 

运行完后,你将在你的virtualBox中完整地运行米的虚拟机——Ubuntu 12.04 LTS 64-bit。你可以通过vagrant ssh命令来ssh连接你的机器,使用vagrant destroy关闭它。

1) 首先初始化

通过创建一个Vagrantfile文件来初始化一个新的vagrant环境

userdeMBP:~ user$ vagrant init hashicorp/precise64
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.

Vagrantfile文件内容:

其实下面仅声明了配置的版本号“2”以及box的名称"hashicorp/precise64"

# -*- 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 = "hashicorp/precise64"

  # 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  //就是让其不会自动查看box是否有更新版本,要用户自己手动运行vagrant box outdated命令去查看

  # 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,进行端口映射,将主机的8080端口与虚拟机的80端口映射起来,没有指定IP,则默认使用localhost
  # 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 端口映射,并指定访问的IP地址
  # 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. IP指定的是虚拟机的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. 与虚拟机共享文件夹。第一个地址是主机实际文件夹地址(默认为本机vagrantfile所在目录),第二个是虚拟机中用来挂载的文件夹(默认为/vagrant)。
  # 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| 默认使用的虚拟化平台是virtualbox
  #   # Display the VirtualBox GUI when booting the machine 当启动机器的时候显示VirtualBox的图形化界面
  #   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
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL  一些想要在虚拟机启动后执行的shell脚本,如下面就进行了apt-get的更新和apache2的安装
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end

可以在vagrant cloud上找到该box,以及它的Vagrantfile内容:

virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统

 

2)启动vagrant

userdeMBP:~ user$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/precise64' could not be found. Attempting to find and install... 没有在本地找到hashicorp/precise64这个box
    default: Box Provider: virtualbox 默认使用的虚拟化平台是virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/precise64'
    default: URL: https://vagrantcloud.com/hashicorp/precise64
==> default: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box
==> default: Box download is resuming from prior download progress
    default: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> default: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbox'!
==> default: Importing base box 'hashicorp/precise64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Setting the name of the VM: user_default_1545626647357_52059
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual: 该警告就是是否共享文件夹,默认是共享的,可以按照下面的方式去取消共享

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false 
==> default: Vagrant has detected a configuration issue which exposes a
==> default: vulnerability with the installed version of VirtualBox. The
==> default: current guest is configured to use an E1000 NIC type for a
==> default: network adapter which is vulnerable in this version of VirtualBox.
==> default: Ensure the guest is trusted to use this configuration or update
==> default: the NIC type using one of the methods below:
==> default: 
==> default:   https://www.vagrantup.com/docs/virtualbox/configuration.html#default-nic-type
==> default:   https://www.vagrantup.com/docs/virtualbox/networking.html#virtualbox-nic-type
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports... 映射的端口
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM... 启动了虚拟机
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222 可以使用vagrant ssh连接虚拟机
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders... 挂载共享文件夹
    default: /vagrant => /Users/user 虚拟机上的/vagrant文件夹将于本机的/Users/user共享

 查看此时本机的box:

userdeMBP:~ user$ vagrant box list
hashicorp/precise64 (virtualbox, 1.1.0)

然后现在打开virtualBox工具,可以看见果然开启了一个虚拟机:

virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统

然后在我本地的共享文件夹下会生成一个VirtualBox VMs文件夹:

virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统

存放着我打开的虚拟机及其文件:

virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统

打开虚拟机,用户名和密码都是vagrant:

virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统

也可以直接在终端使用vagrant ssh来连接虚拟机:

userdeMBP:~ user$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Mon Dec 24 06:58:45 2018
vagrant@precise64:~$

使用ls /vagrant 命令就能够看见本机共享文件夹中的内容了

退出:

vagrant@precise64:~$ logout
Connection to 127.0.0.1 closed.

 到这里,简单的使用过程就结束了

 

3.vagrantfile中提及的基本的相关配置信息

1)使用命令添加box:

userdeMBP:box user$ vagrant box add ubuntu/trusty64
==> box: Loading metadata for box 'ubuntu/trusty64'
    box: URL: https://vagrantcloud.com/ubuntu/trusty64
==> box: Adding box 'ubuntu/trusty64' (v20181207.0.2) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20181207.0.2/providers/virtualbox.box
...

但是这个过程一般要花费很长的时间,这里用户名为ubuntu,box名为trusty64

然后当我们想要使用上面添加的box时,vagrantfile中应写成:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64" #指明使用的box
 config.vm.box_version = "v20181207.0.2" #指明版本
  config.vm.box_url = "https://vagrantcloud.com/ubuntu/trusty64" #指明下载的地址
end

 

2)共享文件夹

在vagrantfile中添加语句:

与虚拟机共享文件夹。第一个地址是主机实际文件夹地址(默认为本机vagrantfile所在目录),第二个是虚拟机中用来挂载的文件夹(默认为/vagrant)

config.vm.synced_folder "../data", "/vagrant_data"

 

3)Provisioning 预配置

即可以在vagrantfile指明在使用vagrant up启动虚拟机时,能够指明要运行的shell脚本来对环境自动进行前期的准备,而不用手动操作,如文件bootstrap.sh

#!/usr/bin/env bash
apt-get update #更新apt-get
apt-get install -y apache2 #安装apache2

⚠️bootstrap.sh文件要放和vagrantfile文件放在同一个目录下

然后在vagrantfile中写上:

config.vm.provision :shell, path: "bootstrap.sh"

或者直接在vagrantfile中写上:

config.vm.provision "shell", inline: <<-SHELL
   apt-get update
   apt-get install -y apache2
SHELL

如果你的Provisioning语句是新添加的,你已经启动过虚拟机了,那么你可以运行:

vagrant reload --provision

它将重启虚拟机,并运行上面的命令即可

 

4)网络

1》端口映射

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

将本机的4567端口映射到虚拟机的80端口,这样在本机的浏览器中调用http://127.0.0.1:4567时,访问的其实是虚拟机80端口提供的服务

⚠️在vagrantfile中新添的配置要运行vagrant reload或vagrant up命令来重启虚拟机,配置才能有效

 

当然,你也是可以指定使用的ip地址的,默认是localhost,即127.0.0.1:

config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "192.168.0.1"

 

2》主机模式

1〉公有网络

config.vm.network "public_network"

创建一个公有网络,匹配网桥网络。这样该虚拟机就能够在你的网络中作为另一个物理设备出现

2>私有网络

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

IP指定的是虚拟机的IP地址,主机可以通过这个IP访问客户机网络。即构建一个私有网络,只允许主机访问该机器

5)Providers

默认使用的Providers是virtualBox,其实其还能使用在VMware, AWS上,不需要在vagrantfile进行配置,直接在运行时声明即可

1》vmware

$ vagrant up --provider=vmware_fusion

2云平台

$ vagrant up --provider=aws

 

上面只是使用vagrant的简单讲解,更详细内容请往下看


推荐阅读
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
author-avatar
骷髅怪天堂_821
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有