标签:vagrant
## 安装virtual box:
```bash
https://www.virtualbox.org/
```
## 下载vagrant 镜像:
```bash
#### 查找并下载官方的box镜像:
https://app.vagrantup.com/boxes/search
#### 还有这个网址里面也有很多:
http://www.vagrantbox.es/
#### 我用了这个镜像centos6.5 x86_64:
https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
```
## 下载并安装vagrant(根据版本不同 自行选择安装):
```bash
https://www.vagrantup.com/downloads.html
```
## 初始化创建文件 和 Vagrantfile文件:
```bash
$ vagrant box add {title} {url}
$ vagrant init {title}
$ vagrant up
### 示例:
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.box
### 初始化系统:
vagrant init centos65
### 启动虚拟机:
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"参数就可以解决。 不明白这个参数的具体意义,可能在多虚拟机环境下可以用的到
```
本文出自 “风满楼” 博客,谢绝转载!
标签:vagrant
原文地址:http://zhenxing.blog.51cto.com/728846/1973199