本文主要介绍了如何使用Docker构建PHP的开发环境,文中作者也探讨了构建基于Docker的开发环境应该使用单容器还是多容器,各有什么利弊。推荐PHP开发者阅读。希望对大家有所帮助。
环境部署一直是一个很大的问题,无论是开发环境还是生产环境,但是Docker将开发环境和生产环境以轻量级方式打包,提供了一致的环境。极大的提升了开发部署一致性。
当然,实际情况并没有这么简单,因为生产环境和开发环境的配置是完全不同的,比如日志等的问题都需要单独配置,但是至少比以前更加简单方便了,这里以PHP开发作为例子讲解Docker如何布置开发环境。
一般来说,一个PHP项目会需要以下工具:
Web服务器:Nginx/TengineWeb程序:PHP-FPM数据库:MySQL/PostgreSQL缓存服务:Redis/Memcache
这是最简单的架构方式,在Docker发展早期,Docker被大量的滥用,比如,一个镜像内启动多服务,日志收集依旧是按照Syslog或者别的老方式,镜像容量非常庞大,基础镜像就能达到80M,这和Docker当初提出的思想完全南辕北辙了,而AlpineLinux发行版作为一个轻量级Linux环境,就非常适合作为Docker基础镜像,Docker官方也推荐使用Alpine而不是Debian作为基础镜像,未来大量的现有官方镜像也将会迁移到Alpine上。本文所有镜像都将以Alpine作为基础镜像。
Nginx/Tengine
这部分笔者已经在另一篇文章Docker容器的Nginx实践中讲解了Tengine的Docker实践,并且给出了Dockerfile,由于比较偏好Tengine,而且官方已经给出了Nginx的alpine镜像,所以这里就用Tengine。
笔者已经将镜像上传到官方DockerHub,可以通过
codedockerpullchasontang/tengine:2.1.2_f/code
获取镜像,具体请看Dockerfile。
PHP-FPM
Docker官方已经提供了PHP的7.0.7-fpm-alpine镜像,Dockerfile如下:
FROMalpine:3.4#persistent/runtimedepsENVPHPIZE_DEPS\autoconf\file\g++\gcc\libc-dev\make\pkgconf\re2cRUNapkadd--no-cache--virtual.persistent-deps\ca-certificates\curl#ensure