> 来源:[卧龙阁](http://www.wolonge.com/zhuanlan/detail/117441)的专栏[ PHP与创业的那些事儿](http://www.wolonge.com/zhuanlan/user/1002562)
环境部署是所有团队都必须面对的问题,随着系统越来越大,依赖的服务也越来越多,比如我们目前的一个项目就会用到:
- Web服务器:Nginx
- Web程序:PHP + Node
- 数据库:MySQL
- 搜索引擎:ElasticSearch
- 队列服务:Gearman
- 缓存服务:Redis + Memcache
- 前端构建工具:npm + bower + gulp
- PHP CLI工具:Composer + PHPUnit
因此团队的开发环境部署随之暴露出若干问题:
1\. 依赖服务很多,本地搭建一套环境成本越来越高,初级人员很难解决环境部署中的一些问题
2\. 服务的版本差异及OS的差异都可能导致线上环境BUG
3\. 项目引入新的服务时所有人的环境需要重新配置
对于问题1,可以用[Vagrant](https://www.vagrantup.com/)这样的基于虚拟机的项目来解决,团队成员共享一套开发环境镜像。对于问题2,可以引入类似[PHPBrew](https://github.com/phpbrew/phpbrew)这样的多版本PHP管理工具来解决。但两者都不能很好地解决问题3,因为虚拟机镜像没有版本管理的概念,当多人维护一个镜像时,很容易出现配置遗漏或者冲突,一个很大的镜像传输起来也不方便。
Docker的出现让上面的问题有了更好的解决方案,虽然个人对于Docker大规模应用到生产环境还持谨慎态度,但如果仅仅考虑测试及开发,私以为Docker的容器化理念已经是能真正解决环境部署问题的银弹了。
下面介绍[Docker构建PHP项目开发环境](http://avnpc.com/pages/build-php-develop-env-by-docker)过程中的演进,本文中假设你的操作系统为Linux,已经安装了Docker,并且已经了解[Docker是什么](https://www.docker.com/whatisdocker/),以及[Docker命令行的基础使用](https://docs.docker.com/userguide/),如果没有这些背景知识建议先自行了解。