## 安装virtual box:
https://www.virtualbox.org/
## 下载vagrant 镜像:
#### 查找并下载官方的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(根据版本不同 自行选择安装):
https://www.vagrantup.com/downloads.html
## 初始化创建文件 和 Vagrantfile文件:
$ 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 ** 多看看启动命令 里面会有很多的启动信息 和 关于虚拟机的参数:
### 跟宿主机共享目录:
#### 默认共享: ** 默认和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默认根据系统环境选择最佳的文件共享方式
## 网络设置:
#### 私网地址: 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"
## 端口设置:
config.vm.network "forwarded_port",guest:80,host:8089 config.vm.network "forwarded_port",guest:8080,host:9090
## 引用外部bash脚本:
config.vm.provision "shell", path: "master_provision.sh"
## 执行命令(provision):
vagrant provision
## 常用命令:
#### 查看已添加的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 # 销毁当前虚拟机
## vagrant 视频:
https://ninghao.net/video/1576
## 保存镜像成文件 .box:
#### 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 里面执行命令或引用外部脚本:
#### 执行命令: 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
## 我的配置:
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
## 错误大全:
#### 问题1 : rzxdeMacBook-Pro:~ root# vagrant package --base centos65 --output /opt/centos65_2017.box ==> centos65: VM not created. Moving on... #### 解决: 去掉"--base"参数就可以解决。 不明白这个参数的具体意义,可能在多虚拟机环境下可以用的到