Docker 容器化搭建 PHP+Nginx 开发环境指南
利用 Docker 将开发环境与生产环境以轻量级方式打包,提供了一致的运行环境。本文以 PHP 项目为例,讲解如何结合 Nginx(或 Tengine)与 PHP-FPM,通过 docker-compose 编排容器,快速搭建高效的本地开发环境。
结果或目标
构建一个分离式架构的 PHP 开发环境:
- Web 服务器:Nginx/Tengine,负责处理静态文件和转发 PHP 请求。
- Web 程序:PHP-FPM,负责执行 PHP 代码。
- 数据库与缓存:MySQL/PostgreSQL 与 Redis/Memcache(可根据需要扩展)。
准备条件
1. 基础镜像选择
推荐使用 Alpine Linux 作为基础镜像,其体积小(基础镜像通常仅数 MB),符合 Docker 轻量级思想。相比早期臃肿的 Debian 镜像,Alpine 能显著减少镜像容量和启动时间。
2. 官方镜像依赖
- PHP-FPM:可使用官方提供的 php:7.x-fpm-alpine 系列镜像(具体版本号视项目需求而定,如 7.0.7 或更新版本)。该镜像已预编译 PHP-FPM 并暴露 9000 端口。
- Tengine/Nginx:若需特定定制可用自建镜像,或使用官方 Nginx Alpine 镜像。
3. 工具准备
安装 Docker 和 Docker Compose,确保宿主机具备基本的网络连通性。
真实操作顺序
第1步:获取或构建基础镜像
目的:准备可用的 PHP 和 Web 服务器容器镜像。
入口:终端命令
动作:
如果直接使用官方 PHP 镜像,Pull 即可:
docker pull php:7.0.7-fpm-alpine
对于 Nginx/Tengine,若无现成官方 Alpine 定制镜像,可参考基于 alpine:3.4 的 Dockerfile 进行构建。核心步骤包括:
- 设置工作目录为
/var/www/html。 - 配置 PHP-FPM 监听端口为
9000(IPv6 支持[::]:9000)。 - 将日志输出至标准错误流 (
/proc/self/fd/2) 以便通过docker logs查看。 - 挂载扩展配置文件
docker-php-ext-*以便后续启用扩展。
第2步:编写 docker-compose.yml 编排文件
目的:定义服务依赖、端口映射和数据卷,实现一键启停。
入口:项目根目录创建 docker-compose.yml
动作:
配置至少两个服务:PHP-FPM 和 Nginx。
version: '2'
services:
php-fpm:
image: php:7.0.7-fpm-alpine
volumes:
- ./src:/var/www/html
restart: always
tengine:
depends_on:
- php-fpm
links:
- php-fpm
image: chasontang/tengine:2.1.2_f
volumes:
- ./nginx.vh.default.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
restart: always
关键参数说明:
- volumes: 将宿主机的 ./src 目录映射到 PHP 容器的 /var/www/html,方便代码热更新。
- links: 建立容器间网络连接,使 Nginx 能通过服务名 php-fpm 访问 PHP 容器。
- ports: 将宿主机 80 端口映射到 Nginx 容器,实现外部访问。
第3步:配置 Nginx 虚拟主机以支持 PHP
目的:配置 Nginx 将 .php 请求正确转发给 PHP-FPM 容器。
入口:项目根目录创建 nginx.vh.default.conf
动作:
在 Nginx 配置中定义 location 块匹配 PHP 文件:
server {
listen 80;
server_name localhost;
# ... 其他静态资源配置 ...
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
# 注意:这里的 host 必须与 docker-compose.yml 中服务的 name 一致
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
# SCRIPT_FILENAME 必须是 PHP-FPM 容器内的绝对路径
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}
完成状态判断:
配置完成后,Nginx 将通过局域网将 PHP 请求转发至 php-fpm 容器的 9000 端口,并在 PHP 容器中查找 /var/www/html 下的脚本执行。
第4步:启动环境与验证
目的:启动所有服务并检查连通性。
入口:终端在项目目录下运行
动作:
docker-compose up -d
启动后,访问 http://localhost。如果返回 PHPINFO 页面或正确的 PHP 响应,则说明环境部署成功。可通过 docker ps 查看各容器状态,使用 docker logs <container_id> 排查错误。
简要总结
通过使用 Docker 和 docker-compose,我们将 Nginx 与 PHP-FPM 分离部署,既保证了环境的标准化,又提高了开发效率。关键在于理解容器间的网络通信(通过 Service Name 连接)以及数据卷映射对文件路径的影响。以上就是 Docker 布置 PHP 开发环境的详细内容,更多关于 Docker PHP 环境搭建的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









