环境部署是所有团队都必须面对的问题,随着系统越来越大,依赖的服务也越来越多,比如我们目前的一个项目就会用到:
Web服务器:Nginx
Web程序:PHP+Node
数据库:MySQL
搜索引擎:ElasticSearch
队列服务:Gearman
缓存服务:Redis+Memcache
前端构建工具:npm+bower+gulp
PHPCLI工具:Composer+PHPUnit
因此团队的开发环境部署随之暴露出若干问题:
依赖服务很多,本地搭建一套环境成本越来越高,初级人员很难解决环境部署中的一些问题
服务的版本差异及OS的差异都可能导致线上环境BUG
项目引入新的服务时所有人的环境需要重新配置
对于问题1,可以用Vagrant这样的基于虚拟机的项目来解决,团队成员共享一套开发环境镜像。对于问题2,可以引入类似PHPBrew这样的多版本PHP管理工具来解决。但两者都不能很好地解决问题3,因为虚拟机镜像没有版本管理的概念,当多人维护一个镜像时,很容易出现配置遗漏或者冲突,一个很大的镜像传输起来也不方便。
Docker的出现让上面的问题有了更好的解决方案,虽然个人对于Docker大规模应用到生产环境还持谨慎态度,但如果仅仅考虑测试及开发,私以为Docker的容器化理念已经是能真正解决环境部署问题的银弹了。
下面介绍Docker构建PHP项目开发环境过程中的演进,本文中假设你的操作系统为Linux,已经安装了Docker,并且已经了解Docker是什么,以及Docker命令行的基础使用,如果没有这些背景知识建议先自行了解。
HelloWorld首先还是从一个PHP在Docker容器下的HelloWorld实例开始。我们准备这样一个PHP文件index.php:
?phpecho"PHPinDocker";
然后在同目录下创建文本文件并命名为Dockerfile,内容为:
#从官方PHP镜像构建FROMphp#将index.php复制到容器内的/var/