> 來源:[臥龍閣](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/),如果沒有這些背景知識建議先自行了解。