## 安裝virtual box:
```bash
https://www.virtualbox.org/
```html
## 下載vagrant 鏡像:
```bash
#### 查找並下載官方的box鏡像:
https://app.vagrantup.com/boxes/searchgit
#### 還有這個網址裏面也有不少:
http://www.vagrantbox.es/github
#### 我用了這個鏡像centos6.5 x86_64:
https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.boxshell
``` vim
## 下載並安裝vagrant(根據版本不一樣 自行選擇安裝):
```bash
https://www.vagrantup.com/downloads.html
```centos
## 初始化建立文件 和 Vagrantfile文件:
```bash
$ vagrant box add {title} {url}
$ vagrant init {title}
$ vagrant upbash
### 示例:
mkdir -p /opt/box/
cd /opt/box/
wget https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box網絡
### 添加一個box到系統並命名爲centos65:
vagrant box add centos65 centos65-x86_64-20140116.boxapp
### 初始化系統:
vagrant init centos65ssh
### 啓動虛擬機:
vagrant up
### 關閉虛擬機:
vagrant halt
### 查看虛擬機狀態:
vagrant global-status
### 重啓虛擬機:
vagrant reload ID
### 登錄系統:
vagrant ssh
** 多看看啓動命令 裏面會有不少的啓動信息 和 關於虛擬機的參數:
```
### 跟宿主機共享目錄:
```bash
#### 默認共享:
** 默認和vagrantfile 同目錄,啓動日誌裏面也有寫:
虛擬機 /vagrant
宿主機 /opt/box
#### 虛擬機全部的配置都在這個文件裏面:
vim Vagrantfile
#### 取消默認共享:
config.vm.synced_folder ".","/vagrant",disabled:true
#### 共享自定義目錄:
config.vm.synced_folder "/opt/box/tmp","/tmp",owner:"root",group:"root",create:true,
mount_options:["dmode=775","fmode=664"]
#### 重啓虛擬機查看掛載:
vagrant reload id
#### 配置選項:
config.vm.synced_folder
"your_folder"(必須) //物理機目錄,能夠是絕對地址或相對地址,相對地址是指相對與vagrant配置文件所在目錄
,"vm_folder(必須)" // 掛載到虛擬機上的目錄地址
,create(boolean)--可選 //默認爲false,若配置爲true,掛載到虛擬機上的目錄若不存在則自動建立
,disabled(boolean):--可選 //默認爲false,若爲true,則禁用該項掛載
,owner(string):'www'--可選 //虛擬機系統下文件全部者(確保系統下有該用戶,不然會報錯),默認爲vagrant
,group(string):'www'--可選 //虛擬機系統下文件全部組( (確保系統下有該用戶組,不然會報錯),默認爲vagrant
,mount_options(array):["dmode=775","fmode=664"]--可選 dmode配置目錄權限,fmode配置文件權限 //默認權限777
,type(string):--可選 //指定文件共享方式,例如:'nfs',vagrant默認根據系統環境選擇最佳的文件共享方式
```
## 網絡設置:
```bash
#### 私網地址:
config.vm.network "public_network",ip:"192.168.3.100"
#### 公網地址:
config.vm.network "public_network",ip:"192.168.3.100"
config.vm.network "public_network",ip:"192.168.3.28"
```
## 端口設置:
```bash
config.vm.network "forwarded_port",guest:80,host:8089
config.vm.network "forwarded_port",guest:8080,host:9090
```
## 引用外部bash腳本:
```bash
config.vm.provision "shell", path: "master_provision.sh"
```
## 執行命令(provision):
```bash
vagrant provision
```
## 經常使用命令:
```bash
#### 查看已添加的box:
vagrant box list
#### 刪除box :
vagrant box remove your_box_name
$ vagrant init # 初始化
$ vagrant up # 啓動虛擬機
$ vagrant halt # 關閉虛擬機
$ vagrant reload # 重啓虛擬機
$ vagrant ssh # SSH 至虛擬機
$ vagrant global-status # 查看虛擬機運行狀態
$ vagrant destroy # 銷燬當前虛擬機
```
```bash
#### vagrant 視頻:
https://ninghao.net/video/1576
```
## 保存鏡像成文件 .box:
```bash
#### 1 進入虛擬機裏面關閉系統:
sudo su -
init 0
#### 2 確認虛擬機狀態變成poweroff(vagrant global-status):
vagrant global-status
id name provider state directory
-------------------------------------------------------------------------
d9fe29b default virtualbox poweroff /opt/box
上面的state 狀態已經變成了poweroff 狀態
2.1 確認狀態:
#### 進入虛擬機目錄執行命令(vagrant status ):
rzxdeMacBook-Pro:box root# vagrant status
Current machine states:
default poweroff (virtualbox)
The VM is powered off. To restart the VM, simply run `vagrant up`
#### 3 執行備份命令:
vagrant package --output /opt/centos65_2017.box
```
## vagrantfile 裏面執行命令或引用外部腳本:
```bash
#### 執行命令:
config.vm.provision "shell",inline: <<-SHELL
sudo su -
yum install -y htop nload iftop iotop lsof netstat telnet
SHELL
#### 執行腳本:
1.1 編寫一個bash 腳本並賦予權限:
vim script.sh
#!/bin/bash
echo "this is vagrant bash " > /tmp/data.log
1.2 在Vagratfile 文件裏面加內容,腳本放在和Vagrantfile文件同級:
config.vm.provision "shell", path: "script.sh"
1.3 執行命令:
vagrant provision
1.4 驗證結果:
沒有啥報錯的話,就能夠看到 安裝信息和bash 腳本運行的結果。 script.sh 這個腳本的運行結果
vagrant ssh
cat /tmp/data.log
```
## 個人配置:
```bash
Vagrant.configure("2") do |config|
# config.vm.hostname = "master01"
#config.ssh.username = "root"
#config.ssh.password = "123456"
config.vm.box = "centos65"
config.vm.synced_folder "/opt/box/tmp","/tmp",owner:"root",group:"root",create:true,mount_options:["dmode=775","fmode=664"]
#config.vm.synced_folder ".","/vagrant",disabled:true
config.vm.network "forwarded_port",guest:80,host:9090
config.vm.network "public_network",ip:"192.168.3.28"
config.vm.provision "shell",inline: <<-SHELL
sudo su -
yum install -y htop nload iftop iotop lsof netstat telnet
SHELL
config.vm.provision "shell", path: "script.sh"
end
```
## 錯誤大全:
```bash
#### 問題1 :
rzxdeMacBook-Pro:~ root# vagrant package --base centos65 --output /opt/centos65_2017.box
==> centos65: VM not created. Moving on...
#### 解決:
去掉"--base"參數就能夠解決。 不明白這個參數的具體意義,可能在多虛擬機環境下能夠用的到
```