[TOC]
## Vagrant
* vagrant 是使用 Ruby 开发,基于 VirtualBox 等虚拟机管理软件的接口,提供了一个可配置、轻量级的便携式虚拟开发环境。
* 使用 Vagrant 管理的虚拟机具有良好的可移植性,并且可以简单的使用配置文件 `Vagrantfile` 来配置虚拟机,缩短本地开发环境的搭建时间。
## Docker
* Docker 是一个的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上。
* 更快速的启动时间
* 一致的运行环境
* 更轻松的迁移
* 持续交付和部署
## 一品开发环境
### 目录结构
~~~
docker_vagrant_centos7/
├─bin/ 预装二进制目录,初次使用的时候会拷贝底下文件到虚拟机 /usr/local/bin
│ ├─composer
│ └─docker-compose
├─data/ 挂载到虚拟机 /data 路径
│ ├─nginx/ Nginx 配置目录
│ │ └─vhost/ Nginx 项目配置
│ └─scripts/ 辅助脚本,一般用来一键创建本地项目
│ └─teach.epweike.net.sh
├─provision/
│ └─bootstrap.sh 虚拟机首次创建时执行的脚本,用来执行一些初始化命令
├─config.yaml.example 示例配置文件
├─init.bat windows 初始化脚本
├─init.sh linux 初始化脚本
├─.gitattributes
├─.gitignore
├─Vagrantfile vagrant 配置文件
└─README.md README文件
~~~
### 启动流程
![启动流程](https://box.kancloud.cn/cd3117ab4af249dd8ffc400cbcbf8cc6_726x650.png)
### 注意事项
* windows 必须要 powershell 版本大等于 3.0,所以在 win7 可能需要安装 powershell 更新,安装之前最好将电脑的补丁打完整,以免被利用 powershell 挖矿,导致电脑卡慢。
* windows 初始化文件 init.bat 必须使用管理员权限运行,否则可能会导致文件挂载在一段时间未使用自动断开。
* linux 下需要安装 NFS 服务来支撑目录映射。
* 宿主机挂载的路径不能包含空格和中文
### 使用步骤
```
# 1.检出项目
git clone http://git.epweike.net:3000/epwk/docker_vagrant_centos7.git
# 2.windows 以管理员权限执行 init.bat,linux 执行 init.sh
// 如果没报错,vagrant 会自动启动起来,如果报错了,可以协助提交 issue 或者提交 pull request。
# 3.连接虚拟机
vagrant ssh
# 4.关闭虚拟机
exit // 退出虚拟机
vagrant halt // 关闭虚拟机
```