Docker 容器化搭建 PHP+Nginx 开发环境指南

陆遥
陆遥
发布时间:2026-10-13 | 9人浏览过
原创

利用 Docker 将开发环境与生产环境以轻量级方式打包,提供了一致的运行环境。本文以 PHP 项目为例,讲解如何结合 Nginx(或 Tengine)与 PHP-FPM,通过 docker-compose 编排容器,快速搭建高效的本地开发环境。

结果或目标

构建一个分离式架构的 PHP 开发环境:

  1. Web 服务器:Nginx/Tengine,负责处理静态文件和转发 PHP 请求。
  2. Web 程序:PHP-FPM,负责执行 PHP 代码。
  3. 数据库与缓存: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 进行构建。核心步骤包括:

  1. 设置工作目录为 /var/www/html。
  2. 配置 PHP-FPM 监听端口为 9000(IPv6 支持 [::]:9000)。
  3. 将日志输出至标准错误流 (/proc/self/fd/2) 以便通过 docker logs 查看。
  4. 挂载扩展配置文件 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 环境搭建的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表