Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用Chef创建自动化虚拟环境。Vagrant可以节省开发者搭建环境的时间,并解决了开发环境不一致问题,有了Vagrant,可以导出box文件分发给团队其它开发者使用。
一、下载及安装所需应用程序
二、安装连接虚拟机环境
Now, everything is ready,open your git bash.
1.新建开发目录(如D:/dev/)
1 | $ cd /d |
2.进入开发目录(D:/dev/),并添加box
1 | $ cd dev |
执行完添加box命令后,box中的镜像文件被放到了/Users/astaxie/.vagrant.d/boxes/
在Window系统中是放到了C:\Users\当前用户名.vagrant.d\boxes\目录下
3.初始化
1 | $ vagrant init myCentos7 |
此时开发目录会多一个Vagrantfile文件(虚拟机配置文件)
4.启动虚拟机
1 | $ vagrant up |
5.通过ssh登录本地环境所在虚拟机
1 | $ vagrant ssh |
如果是用Xshell登录(默认: IP:172.0.0.1 user:vagrant pwd:vagrant port:2222)
如果使用密钥登录使用当前开发目录(D:\dev.vagrant\machines\default\virtualbox\private_key)
此时Linux(centos)环境已经安装完毕
三、配置Vagrantfile
1.box设置
1 | config.vm.box = "myCentos7" |
该名称是初使化vagrant init后面跟的名称
2.hostname设置
1 | config.vm.hostname = "centos7" |
如果我安装了两台虚拟机一台为centos7,另一台为ubuntu16.04,启动时可以使用vagrant up centos7指定某一台启动
3.虚拟机网络设置
1).端口映射(端口转发)
1 | config.vm.network "forwarded_port", guest: 80, host: 8080 |
虚拟机中的端口映射到宿主机对应的端口使用
guest: 80 表示虚拟机中的80端口,host: 8080 表示映射到宿主机的8080端口
表示请求宿主机的8080端口转发请求到虚拟机中的80端口
2).设置IP地址
1 | config.vm.network "private_network", ip: "192.168.1.28" |
4.设置同步(共享)目录
新建项目(代码)目录(D:/dev/project/)
1 | $ mkdir project |
1 | config.vm.synced_folder "./project", "/usr/share/nginx/html" |
(/usr/share/nginx/html为虚拟机目录,设置之后两个目录会互相同步)
5.配置完成后需要重新启动虚拟机使配置文件生效
1 | $ vagrant reload |
如需增加其它配置,请查询Vagrantfile配置文件详解
四、打包分发环境
当配置好开发环境后,退出并关闭虚拟机,运行如下命令对环境进行打包
1 | $ vagrant package |
打包完成后会在当前目录生成一个package.box文件,将此文件给其他开发者,其他开发者
添加这个box并用其初始化自己的开发目录就能得到一模一样的开发环境
五、vagrant 常用操作命令
命令 | 作用 |
---|---|
vagrant box add | 添加box的操作 |
vagrant init | 初始化box的操作,会生成vagrant的配置文件Vagrantfile |
vagrant up | 启动本地环境 |
vagrant ssh | 通过 ssh 登录本地环境所在虚拟机 |
vagrant halt | 关闭本地环境 |
vagrant suspend | 暂停本地环境 |
vagrant resume | 恢复本地环境 |
vagrant reload | 修改了 Vagrantfile 后,使之生效(相当于先 halt,再 up) |
vagrant destroy | 彻底移除本地环境 |
vagrant box list | 显示当前已经添加的box列表 |
vagrant box remove | 删除相应的box |
vagrant package | 打包命令,可以把当前的运行的虚拟机环境进行打包 |
vagrant plugin | 用于安装卸载插件 |
vagrant status | 获取当前虚拟机的状态 |
vagrant global-status | 显示当前用户Vagrant的所有环境状态 |