使用Vagrant 和 VirtualBox 搭建虚拟机

版权声明:本文为博主(wisdom-chen)的原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38423105/article/details/85253829

VirtualBox 安装

       VirtualBox 是 Oracle 开源的虚拟化系统,和 VMware 是同类产品,支持多个平台,可以到官方网站:https://www.virtualbox.org/wiki/Downloads 下载适合你平台的 VirtualBox 最新版本并安装。

Vagrant 安装

       到官方网站下载相应系统平台的安装包:http://www.vagrantup.com/downloads.html 
直接根据向导进行操作即可完成安装,安装完后就可以在终端输入 vagrant 命令了。

使用Vagrant 和box 搭建虚拟机

      使用vagrant 需要准备.box文件,就跟VmWare需要repo镜像仓库一样,box是一个打包好的操作系统,是一个后缀名为 .box 的文件,其实是一个压缩包,里面包含了 Vagrant 的配置信息和 VirtualBox 的虚拟机镜像文件。

VagrantBox官网下载地址 : http://www.vagrantbox.es/

我这边下的是centos-7.0-x86_64.box

1 添加box文件到vagrant中

添加 box 命令格式:vagrant box add <本地 box 名称> <box 文件>

  • 本地 box 名称:自定义名称,该名称是本地 vagrant 管理时使用的名称;
  • box 文件:前面下载的 vagrant box 文件或者远程 box url 地址;
PS F:\vagrant-test> vagrant box add test centos-7.0-x86_64.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'test' (v0) for provider:
    box: Unpacking necessary files from: file://F:/vagrant-test/centos-7.0-x86_64.box
    box: Progress: 100% (Rate: 1013M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'test' (v0) for 'virtualbox'!

2 查看 box 是否添加成功 
查看当前 vagrant 中有哪些 boxvagrant box list

PS F:\vagrant> vagrant box list
centos-7.0  (virtualbox, 0)
test (virtualbox, 0)

3 初始化上面添加的 box

初始化命令格式:vagrant init <本地 box 名称> 
本地 box 名称:第 2 步中添加的 box 名称 
这里初始化前面添加的 box,初始化后会在当前目录生产一个 Vagrantfile 文件,里面包含了虚拟机的各种配置。

PS F:\vagrant-test> vagrant init 'test'
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.

4 启动虚拟机

虚拟机启动命令:vagrant up 
启动虚拟机时会自动将当前目录(即 Vagrantfile 文件所在目录),和虚拟机的 /vagrant 目录共享

PS F:\vagrant-test> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'test'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant-test_default_1545741903935_21710
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2200 (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:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
...
    default: Guest Additions Version: 4.3.28
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => F:/vagrant-test

vagrant up 报错

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
    
Stderr: VBoxManage.exe: error: VT-x is disabled in the BIOS for all CPU modes (VERR_VMX_MSR_ALL_VMX_DISABLED)

原因是 系统的虚拟化技术没有开启

按F2进入到Bios界面,然后settings–>configuration-IntelVirtualTechnology设置为[ENABLED]

检测是否开启: 任务管理器–>性能–>cpu -> 虚拟化: 开启

5 连接虚拟机 

命令格式:vagrant ssh

PS F:\vagrant-test> vagrant ssh
Last login: Thu Jul 16 08:48:31 2015 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

6 查看 Vagrant 共享目录

进入虚拟机后执行 df -h 可以看到 Vagrant 默认把宿主机 Vagrantfile 所在的目录和虚拟机的 /vagrant 目录共享,可以通过 ls /vagrant/ 查看该目录内容,内容和宿主机对应目录一致。

[vagrant@localhost ~]$ df -h
Dateisystem             Größe Benutzt Verf. Verw% Eingehängt auf
/dev/mapper/centos-root  8,4G    1,1G  7,4G   13% /
devtmpfs                 488M       0  488M    0% /dev
tmpfs                    497M       0  497M    0% /dev/shm
tmpfs                    497M    6,5M  491M    2% /run
tmpfs                    497M       0  497M    0% /sys/fs/cgroup
/dev/sda1                497M    118M  379M   24% /boot
none                     201G    6,2G  195G    4% /vagrant
[vagrant@localhost ~]$ ls /vagrant/
centos-7.0-x86_64.box  Vagrantfile
[vagrant@localhost ~]$ ls
base.sh  cleanup.sh  puppet.sh  vagrant.sh  virtualbox.sh  zerodisk.sh
[vagrant@localhost ~]$

Vagrant 配置文件浅析

前面我们执行 vagrant init <本地 box 名称> 会在当前目录生成 Vagrantfile 文件,这个文件是非常重要的,一般给别人共享自己的环境时都是提供一个 Vagrantfile 和一个 box 文件,这样就可以很轻松地将环境共享给别人,别人能得到一模一样的统一的环境,这就是使用 Vagrant 的好处。

Vagrantfile 主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant 的一些基础配置。Vagrant 是使用 Ruby 开发的,所以它的配置语法也是 Ruby 的,对于没有学过 Ruby 的朋友也没关系,根据例子模仿下就会了。

修改完配置后需要执行 vagrant reload 重启 VM 使其配置生效。

以下简单介绍下常用配置的配置项: 
1  box 名称设置 
config.vm.box = "base" 
上面这配置展示了 Vagrant 要去启用那个box作为系统,也就是前面我们输入 vagrant init <本地 box 名称>时所指定的 box,如果沒有输入 box 名称的话,那么默认就是 base

2  VM 相关配置 
VirtualBox 提供了 VBoxManage 这个命令行工具,可以让我们设定 VM,用modifyvm这个命令让我们可以设定 VM 的名称和内存大小等等,这里说的名称指的是在 VirtualBox 中显示的名称,我们也可以在 Vagrantfile 中进行设定,举例如下:

调用 VBoxManage 的 modifyvm 的命令,设置 VM 的名称为 ubuntu,内存为 1024 MB。你可以类似的通过定制其它 VM 属性来定制你自己的 VM。

config.vm.provider "virtualbox" do |v|
  v.customize ["modifyvm", :id, "--name", "ubuntu", "--memory", "1024"]
end

3  网络设置 
Vagrant 有两种方式来进行网络连接,一种是 host-only (主机模式),这种模式下所有的虚拟系统是可以互相通信的,但虚拟系统和真实的网络是被隔离开的,虚拟机和宿主机是可以互相通信的,相当于两台机器通过双绞线互联。另一种是Bridge(桥接模式),该模式下的 VM 就像是局域网中的一台独立的主机,可以和局域网中的任何一台机器通信,这种情况下需要手动给 VM 配 IP 地址,子网掩码等。我们一般选择 host-only 模式,配置如下:

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

4  hostname 设置 
hostname 的设置非常简单:

config.vm.hostname = "kubernetes"

5  目录共享 
我们前面介绍过/vagrant目录默认就是当前的开发目录,这是在虚拟机开启的时候默认挂载同步的。我们还可以通过配置来设置额外的同步目录:

# 第一个参数是主机的目录,第二个参数是虚拟机挂载的目录
config.vm.synced_folder  "/Users/haohao/data", "/vagrant_data"

6  端口转发 
对宿主机器上 8080 端口的访问请求 forward 到虚拟机的 80 端口的服务上:

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

Vagrant 常用命令清单

  • vagrant box add 添加box
  • vagrant init 初始化 box
  • vagrant up 启动虚拟机
  • vagrant ssh 登录虚拟机
  • vagrant box list 列出 Vagrant 当前 box 列表
  • vagrant box remove 删除相应的 box
  • vagrant destroy 停止当前正在运行的虚拟机并销毁所有创建的资源
  • vagrant halt 关机
  • vagrant package 把当前的运行的虚拟机环境进行打包为 box 文件
  • vagrant plugin 安装卸载插件
  • vagrant reload 重新启动虚拟机,重新载入配置文件
  • vagrant resume 恢复被挂起的状态
  • vagrant status 获取当前虚拟机的状态
  • vagrant suspend 挂起当前的虚拟机
  • vagrant global-status 查看当前 vagrant 管理的所有 vm 信息
$ vagrant global-status                                                                                                                                
id       name    provider   state   directory
------------------------------------------------------------------------
aeb2f19  default virtualbox running /Users/haohao/vagrant
2cd1f42  default virtualbox aborted /Users/haohao/vagrant-test
943c1bf  default virtualbox aborted /Users/haohao/work/vm
  • vagrant ssh-config 输出用于 ssh 连接的一些信息
$ vagrant ssh-config                                                                                                                                   
Host default
  HostName 127.0.0.1
  User ubuntu
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/haohao/vagrant/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Vagrant 启动虚拟机集群

前面我们都是通过一个 Vagrantfile 配置启动单台机器,如果我们要启动一个集群,那么可以把需要的节点在一个 Vagrantfile 写好,然后直接就可以通过 vagrant up 同时启动多个 VM 组成一个集群。以下示例配置一个 web 节点和一个 db 节点,两个节点在同一个网段,并且使用同一个 box 启动:

Vagrant.configure("2") do |config|
  config.vm.define :web do |web|
    web.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--name", "web", "--memory", "512"]
    end
    web.vm.box = "ubuntu-server-16.04"
    web.vm.hostname = "web"
    web.vm.network :private_network, ip: "11.11.1.1"
  end

  config.vm.define :db do |db|
    db.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--name", "db", "--memory", "512"]
    end
    db.vm.box = "ubuntu-server-16.04"
    db.vm.hostname = "db"
    db.vm.network :private_network, ip: "11.11.1.2"
  end
end

参考博客:https://blog.csdn.net/qianghaohao/article/details/80038096

猜你喜欢

转载自blog.csdn.net/qq_38423105/article/details/85253829
今日推荐