使用Vagrant 和 VirtualBox 搭建虛擬機器
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
中有哪些 box
:vagrant 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.
[[email protected] ~]$
6 檢視 Vagrant 共享目錄
進入虛擬機器後執行 df -h
可以看到 Vagrant 預設把宿主機 Vagrantfile
所在的目錄和虛擬機器的 /vagrant
目錄共享,可以通過 ls /vagrant/
檢視該目錄內容,內容和宿主機對應目錄一致。
[[email protected] ~]$ 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
[[email protected] ~]$ ls /vagrant/
centos-7.0-x86_64.box Vagrantfile
[[email protected] ~]$ ls
base.sh cleanup.sh puppet.sh vagrant.sh virtualbox.sh zerodisk.sh
[[email protected] ~]$
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