设为首页 收藏本站
查看: 1228|回复: 0

[经验分享] Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)

[复制链接]
发表于 2017-6-23 10:38:56 | 显示全部楼层 |阅读模式
  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>  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>  
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,自动帮你生成 Vagrantfile
  • vagrant init box 名字:初始化 Vagrantfile
  • vagrant up:启动虚拟机
  • vagrant ssh:连接虚拟机
  • vagrant halt:关闭虚拟机
  • vagrant>:重新加载 Vagrantfile 文件
  • vagrant suspend:暂时挂起虚拟机
  • vagrant destroy:销毁虚拟机
  • vagrant status:查看虚拟机运行状态
  • vagrant package:导出 Box
  在使用 Vagrant 的时候,遇到了这样一个问题:创建的 Ubuntu 虚拟机,需要访问外部网络,所以需要将虚拟机的网络模式设置为桥接模式(Bridged),于是就使用 VirtualBox 进行设置,但设置成功之后,每次 Vagrant 启动虚拟机的时候,都会进行网络模式重置,但如果用 VirtualBox 启动的话,就没有什么问题。
DSC0000.png

  这个问题搞了好久,最后的解决方案是修改 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-387226-1-1.html 上篇帖子: Qt5获取网卡/IP等信息 下篇帖子: openstack--1--基础环境搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表