Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)
Vagrant(官网、github)是一款构建虚拟开发环境的工具,支持 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念类似于 Docker(实质是不同的),你可以把它看作是一个箱子,里面装了一些东西,Vagrant 创建虚拟机的时候,需要用到 Box ,它里面包含了虚拟机配置、虚拟机硬盘镜像和 Vagrant 配置的压缩包,有了 Box,你不需要再重新下载 ISO 镜像文件、新建虚拟机、修改虚拟机等配置,而是直接运行你所需要的操作系统。
更多 Vagrant 概念,参考:Vagrant 是什么,不是什么。
Vagrant 支撑 VirtualBox、HyperV、VMWare 等虚拟机软件,我 Mac 电脑装的是 VMWare Fusion,但 Vagrant 支持是收费的(79 美元),好黑呀,不过 VirtualBox 是免费的,我又安装了个 VirtualBox(大概 300 M),以便做示例。
使用 Vagrant 的目的,就是方便在虚拟机中做 Consul 的集群(Mac OS、Ubuntu 安装及使用 Consul)。
安装 Vagrant(使用 homebrew)
$ brew install vagrant
安装好 Vagrant 之后,就可以使用初始化 Box 了,你可以使用别人封装好的 Box,也可以自己封装 Box,比如下面命令:
$ vagrant box add ubuntu/trusty64
ubuntu/trusty64是一个公开 Boxes(更多 Boxes)。运行上面第一行命令后,Vagrant 会在工作目录下创建 Vagrantfile 配置文件。在线下载 Box 会比较慢,你可以先下载 Box 之后,再加载本地的 Box 进行初始化。
我使用的是 Ubuntu 64 Box:http://files.vagrantup.com/precise64.box,其他 Box 下载地址:http://www.vagrantbox.es/
下载好 Box 之后,你可以创建这样的工作目录:
$ tree
.
├── boxes
│ └── precise64.box
└── works
2 directories, 1 files
创建命令:
$ mkdir vagrant_projects
$ mkdir boxes
$ mkdir works
然后把下载好的 Box 放到 boxes 文件夹下,然后命令转到 boxes 目录下(cd boxes),然后执行添加 Box 命令:
$ vagrant box add ubuntu precise64.box
添加后之后,可以查看所添加的 Box 列表:
$ vagrant box list
ubuntu64 (virtualbox, 0)
命令转到 works 目录下(cd works)接着进行初始化虚拟机:
$ vagrant init ubuntu64
初始化完成后,会在当前目录下生成一个 VagrantFile 配置文件,里面是对虚拟机环境的一些配置(可以手动修改),然后启动虚拟机:
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: bridged
==> 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
default: SSH username: vagrant
default: SSH auth method: private 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.1
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /Users/xishuai/vagrant_project/works
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
虚拟机启动好之后(可以在 VirtualBox 中查看是否已启动),就可以登录虚拟机了:
$ 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: Tue Dec 27 10:16:06 2016 from 10.0.2.2
vagrant@precise64:~$
这个命令就表示已经进入了 Ubuntu 的系统,可以像在虚拟机中使用一样使用它了。
当然也可以把你配好的 Box 导出出来,给其他人使用,执行命令:
$ cd ~/VirtualBox\ VMs/works_default_1482820841651_93029
$ vagrant package --output works_default_1482820841651_93029 --base ubuntu64.box
Vagrant 命令列表:
vagrant box list:查看box列表vagrant add box box 名字 box地址:添加box,自动帮你生成 Vagrantfilevagrant init box 名字:初始化 Vagrantfilevagrant up:启动虚拟机vagrant ssh:连接虚拟机vagrant halt:关闭虚拟机vagrant reload:重新加载 Vagrantfile 文件vagrant suspend:暂时挂起虚拟机vagrant destroy:销毁虚拟机vagrant status:查看虚拟机运行状态vagrant package:导出 Box
在使用 Vagrant 的时候,遇到了这样一个问题:创建的 Ubuntu 虚拟机,需要访问外部网络,所以需要将虚拟机的网络模式设置为桥接模式(Bridged),于是就使用 VirtualBox 进行设置,但设置成功之后,每次 Vagrant 启动虚拟机的时候,都会进行网络模式重置,但如果用 VirtualBox 启动的话,就没有什么问题。

这个问题搞了好久,最后的解决方案是修改 Vagrantfile 配置文件,添加如下配置:
config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)"
config.vm.boot_timeout = 20
boot_timeout是链接超时设置(20 秒),bridge后面表示桥接的网络模式(WiFi 网络),如果不进行设置的话,每次启动虚拟机的时候,会进行选择网络模式:
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Specific bridge 'en1: Wi-Fi (AirPort)' not found. You may be asked to specify
==> default: which network to bridge to.
==> default: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: Thunderbolt 1
3) en2: Thunderbolt 2
4) p2p0
5) awdl0
6) bridge0
7) vmnet1
8) vmnet8
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
default: Which interface should the network bridge to?
由于之前的 Ubuntu 版本太低(12.04),安装 .NET Core 的时候,遇到了一些问题,后来又换了一个 Ubuntu Box(版本 14.04),但配置的时候,又遇到了下面问题:
$ vagrant init ubuntu_server1
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.
xishuaideMacBook-Pro:ubuntu_server1 xishuai$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu_server1'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ubuntu_server1_default_1482924693668_66404
==> 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
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: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
==> default: Mounting shared folders...
default: /vagrant => /Users/xishuai/vagrant_project/ubuntu_server1
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:
mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant
The error output from the command was:
mount: unknown filesystem type 'vboxsf'
解决方案(参考 Vagrant error : Failed to mount folders in Linux guest):
$ vagrant plugin install vagrant-vbguest
另外,附一些 Linux 常用命令:
command &:将进程放在后台执行ctrl + z:暂停当前进程 并放入后台jobs:查看当前后台任务bg( %id):将任务转为后台执行fg( %id):将任务调回前台kill( %id):杀掉任务
参考资料:
- Vagrant 安装配置
- 用 Vagrant 管理虚拟机
- 快速打造跨平台开发环境 vagrant + virtualbox + box
- 开始使用 Vagrant
- windows 下 使用 vagrant 来管理 linux 虚机开发环境
- Vagrant PUBLIC NETWORKS
Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)的更多相关文章
- VMware Workstation11安装Mac OS X 10.10虚拟机
原文:http://jingyan.baidu.com/article/3f16e003eac66e2591c103e0.html 优化:http://www.cnblogs.com/yipu/p/4 ...
- VMware 12安装虚拟机Mac OS X 10.10使用小技巧(虚拟机Mac OS X 10.10时间设置,虚拟机Mac OS X 10.10通过代理上网,Mac OS X 10.10虚拟机优化,VMware虚拟机相互复制)
1:修改Mac OS 系统时间 2:Mac OS系统 通过代理上网 VMware 12安装Mac OS X 10.10虚拟机优化心得 虚拟显卡硬伤,所以必须要优化下才能用,优化的原则就是能精简的精简, ...
- 宿主机mac os无法连接到虚拟机centos
宿主机: Mac OS 10.9.2 虚拟机: [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root ...
- MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址
MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址 注意:已经下载过MAC OS 10.10.5虚拟机免费下载(可安装Xcode7)链接:http://www.cnblogs ...
- MAC OS 10.10.5虚拟机免费下载(可安装Xcode7)
MAC OS 10.10.5虚拟机免费下载(可安装Xcode7) MAC OS 10.10.5虚拟机免费(可安装Xcode7)下载地址:链接: http://pan.baidu.com/s/1dD ...
- Windows 8.1下安装Mac OS X 10.8虚拟机
转载自http://blog.csdn.net/jordanxinwang/article/details/43637799 1.准备 宿主操作系统:Windows 8.1 64位.特别地,需要CPU ...
- Mac OS X系统下利用VirtualBox安装和配置Windows XP虚拟机
准备工作 下载并安装VirtualBox for Mac到https://www.virtualbox.org/wiki/Downloads下载VirtualBox <版本> for OS ...
- Vagrant 管理部署 VirtualBox (推荐使用)
学习一段时间的大数据和容器技术,使用虚拟机搭建实验环境还是挺耗时耗力的. 一旦虚拟机坏掉了,还要重新开始. 最近发现了Vagrant, 简直好用上天,方便快捷,易用. 下面介绍如何在Windows中安 ...
- Mac OS X安装之虚拟机环境下的总结
最近一直忙着公司iOS Touch的新版发布,终于忙过了.现在,又开始了新的阶段,不过算是轻松了很多.回来一看,自己的博客空空如也,实在受不了了.于是,开始更一下吧,哈哈. 这个文档是我几个月前,开始 ...
随机推荐
- Unity3d学习 相机的跟随
最近在写关于相机跟随的逻辑,其实最早接触相机跟随是在Unity官网的一个叫Roll-a-ball tutorial上,其中简单的涉及了关于相机如何跟随物体的移动而移动,如下代码: using Unit ...
- java Web项目创建之一(普通java web项目的创建与发布)
1.创建新的web项目 file->new_>Dynamic Web Project(如图) 或file->new->Project->Web->Dynamic W ...
- [C#] 走进 LINQ 的世界
走进 LINQ 的世界 序 在此之前曾发表过三篇关于 LINQ 的随笔: 进阶:<LINQ 标准查询操作概述>(强烈推荐) 技巧:<Linq To Objects - 如何操作字符串 ...
- 算法与数据结构(十四) 堆排序 (Swift 3.0版)
上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...
- H5坦克大战之【画出坦克】
今天是个特殊的日子,圣诞节,也是周末,在这里先祝大家圣诞快乐!喜庆的日子,我们可以稍微放松一下,扯一扯昨天雷霆对战凯尔特人的比赛,这场比赛大威少又双叒叕拿下三双,而且是一个45+11+11的超级三双, ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- jquery屏幕滚动计算事件总结
获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度: $(docume ...
- windows环境redis主从安装部署
准备工作 下载windows环境redis,我下载的是2.4.5,解压,拷贝一主(master)两从(slaveof).主机端口使用6379,两从的端口分别为6380和6381, 我本地索性用6379 ...
- MyBatis3.2从入门到精通第一章
第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...
- 一步步开发自己的博客 .NET版(3、注册登录功能)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...