1. 程式人生 > >Mac OS 使用 Vagrant 管理虛擬機器(VirtualBox)

Mac OS 使用 Vagrant 管理虛擬機器(VirtualBox)

Vagrant(官網github)是一款構建虛擬開發環境的工具,支援 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念類似於 Docker(實質是不同的),你可以把它看作是一個箱子,裡面裝了一些東西,Vagrant 建立虛擬機器的時候,需要用到 Box ,它裡面包含了虛擬機器配置、虛擬機器硬碟映象和 Vagrant 配置的壓縮包,有了 Box,你不需要再重新下載 ISO 映象檔案、新建虛擬機器、修改虛擬機器等配置,而是直接執行你所需要的作業系統。

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 進行初始化。

下載好 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
[email protected]:~$ 

這個命令就表示已經進入了 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 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 plugin install vagrant-vbguest

另外,附一些 Linux 常用命令:

  • command &:將程序放在後臺執行
  • ctrl + z:暫停當前程序 並放入後臺
  • jobs:檢視當前後臺任務
  • bg( %id):將任務轉為後臺執行
  • fg( %id):將任務調回前臺
  • kill( %id):殺掉任務

參考資料:

相關推薦

Mac OS 使用 Vagrant 管理虛擬機器VirtualBox

Vagrant(官網、github)是一款構建虛擬開發環境的工具,支援 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念類似於 Docker(實質是不同的),你可以把它看作是一個箱子,裡面裝了一些東西,Vagrant 建立虛擬機器的時候,需要用到 Box ,它裡面包含了虛擬機器配

OpenStack之管理虛擬機器

OpenStack的三個元件(四個節點)已安全搭建完成,本篇博文為大家帶來基本管理,使平臺化管理更為方便、有效。 一、映象管理 1、掛載/上傳映象到控制節點 mkdir /abcmount.cifs //192.168.37.1/rhel7/KVM/CentOS-7-x86_64-DVD

虛擬機器VirtualBox網路設定詳細

參考:https://yq.aliyun.com/articles/149551 目的:想在現有的具有網路的機器中建立一臺linux虛擬機器,且有固定IP,方便開發使用 在網上尋找了比較詳細的教程,這裡記錄一下: 虛擬機器配置方案: 首先VirtualBox小

k8s搭建之初始環境準備-vagrant部署虛擬機器

k8s搭建之初始環境準備-虛擬機器篇(一) 我相信很多搭建k8s 叢集的小夥伴最頭疼的一件事情就是,我沒有那麼多機器啊,別說高可用,就算是一個master一個node 用VM都煩的很,安裝的哪個圖形化就要點老半天,snapshot 快照要是沒有準備,環境搞得亂七

Linux關於虛擬機器VirtualBox網路配置問題

VirtualBox的提供了四種網路接入模式,它們分別是: 1、NAT 網路地址轉換模式(NAT,Network Address Translation) 2、Bridged Adapter 橋接模式 3、Internal 內部網路模式 4、Host-only

VirtualBox安裝Mac OS 10.11——虛擬機器安裝黑蘋果

VirtualBox安裝Mac OS 10.11 ,安裝日期:2016 / 5 / 14 用虛擬機器裝黑蘋果本人也裝了不下3次了,這次為了做這個教程還特意把virtualbox和舊版的Mac OS刪了,重新再裝一遍。 所以保證能執行,不像網上其他教程都是匯出複製,還不要臉

(一)Mac OS 配置Java虛擬機器 和 JDK

1、網上搜索Mac Java虛擬機器 例: jre-7u15-macosx-x64  2、配置命令列 JDK  下載 mac Java JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow

JAVA虛擬機器記憶體管理

一.記憶體分配。java虛擬機器在執行的時候,將會包含以下執行時資料區域: 1.執行緒私有的部分: 程式計數器:可以看成是當前執行緒所執行位元組碼的行號指示器。位元組碼直譯器就是通過改變這個計數器的值來確定下一條位元組碼指令。 虛擬機器棧:虛擬機器棧為虛擬機器使用的

windows命令列啟動虛擬機器VirtualBox、VMware

VirtualBox.bat: C: cd "\Program Files\Oracle\VirtualBox" VBoxManage startvm "CentOS-6.5" --type headless VMware.bat: C: cd "\Program Fil

虛擬機器VMware安裝ubuntu18過程中總是被卡死或者不能輸入name,password解決辦法

         虛擬機器(VMware)安裝ubuntu18過程中總是被卡死或者不能輸入name,password解決辦法 問題描述: 虛擬機器(VMware)安裝ubuntu 18.4過程中總是被卡死或者不能輸入name,passwo

Arch Linux VMware虛擬機器新手安裝教程

準備工作:     下載好Arch Linux的映象檔案       百度開啟Arch官網點選download(下載)轉到下載介面,點選磁力下載或者種子下載(官網預設是英文,英文不好的童鞋可以安裝瀏覽器翻譯外掛,本人使用Windows10自帶的edge瀏覽器,推薦安裝Translato

OpenStack之管理虛擬

col network type icm -s proc 所有 網絡 pair OpenStack的三個組件(四個節點)已安全搭建完成,本篇博文為大家帶來基本管理,使平臺化管理更為方便、有效。 一、鏡像管理 1、掛載/上傳鏡像到控制節點 mkdir /abcmount.

Java程式設計師從笨鳥到菜鳥之九十三深入java虛擬機器——類載入器詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Kali Linux Vmware虛擬機器新手安裝

準備工作: 1.安裝VMware workstation 軟體 2.下載好kali linux 的ios系統檔案 3.開啟電腦的虛擬化支援(Intel VT-x/EPT或AMD-V/RVI(V)) 虛擬機器設定: 1.在VMware虛擬機器中新建虛擬機器,如圖 2.點選瀏覽,選擇Kali Li

【轉載】spring boot 連結 虛擬機器Linux redis

原文:https://www.imooc.com/article/43279?block_id=tuijian_wz 前提是你已經安裝redis且支援遠端連線,redis的安裝這裡不再贅述,有需要的可以參考我的另一篇文章:centos 7.3上安裝redis。這裡主要講講如何判斷及設定redis支援遠端連線

java虛擬機器JVM

1.jvm虛擬機器概述和基本概念  (虛擬機器分為系統虛擬機器-》(VirtualBox   VMware ==)  和 程式虛擬機器-》(JVM  DVM == )   )    1.1什麼是jvm      &n

深入理解java虛擬機器位元組碼指令簡介

Java虛擬機器指令是由(佔用一個位元組長度、代表某種特定操作含義的數字)操作碼Opcode,以及跟隨在其後的零至多個代表此操作所需引數的稱為運算元 Operands 構成的。由於Java虛擬機器是面向運算元棧而不是暫存器的架構,所以大多數指令都只有操作碼,而沒有運算元。 位元組碼指令集是一種具有鮮明特點、

「深入Java虛擬機器6」:Java語法糖

語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發明的一個術語,指在計算機語言中新增的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式設計師使用。Java中最常用的語法糖主要有泛型、變長引數、條件編譯、自動拆裝箱、內部類等。虛擬機器並不支援這些語法

JAVA虛擬機器虛擬機器類載入機制

虛擬機器的類載入機制是指 把描述類的資料從Class檔案載入到記憶體,並對資料進行校驗,轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別。類的載入連線和初始化過程都是在程式執行期間完成的。 類的生命週期: 載入->連線(驗證,準備,解析)->初始化->使用

Java程式設計師從笨鳥到菜鳥之九十四深入java虛擬機器——類的生命週期 下類的初始化

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!