Docker搭建PHP项目的核心是定义服务、安装扩展、挂载代码;通过docker-compose.yml编排Nginx+PHP-FPM+MySQL,用Dockerfile安装mysqli、opcache等扩展,volume挂载实现热更新,xdebug支持断点调试。

PHP 项目用 Docker 搭建,核心是三件事:定义服务、安装扩展、挂载代码。不用从零写所有配置,重点是搭得稳、改得快、跑得顺。
docker-compose.yml 是主干
它把 PHP、Web 服务器、数据库串成一个可启动的整体。推荐用 Nginx + PHP-FPM 组合,比 Apache 更轻、更常用。
- Nginx 容器负责接收 HTTP 请求、处理静态文件,再把 .php 请求转发给 PHP-FPM
- PHP-FPM 容器只专注执行 PHP 脚本,不暴露端口,通过 Unix socket 或网络与 Nginx 通信
- MySQL/MariaDB 单独作为 db 服务,用 volumes 持久化数据,避免重启丢库
- 所有服务共用一个自定义网络(如 php-network),容器间直接用服务名(如 db、php)互通
Dockerfile 要装对扩展
官方 php:8.2-fpm 镜像不带 MySQL、Redis、OPcache 等常用扩展,必须自己加。
- 用 docker-php-ext-install 安装 mysqli、pdo_mysql、opcache 等核心扩展
- 用 pecl install 装 redis、xdebug(开发环境)、swoole 等第三方扩展
- 复制自定义 php.ini(比如调大 memory_limit、开启 display_errors)到容器内对应路径
- 如果项目用 Composer,建议在构建阶段就 run composer install --no-dev,避免运行时拉依赖
代码和配置要实时同步
开发时不能每次改完代码都 rebuild 镜像,得靠 volume 挂载实现热更新。
立即学习“PHP免费学习笔记(深入)”;
- 把本地 ./src 或 ./www 目录挂载到容器的 /var/www/html
- Nginx 的 conf 文件(如 default.conf)也挂载进去,方便调试路由和 rewrite 规则
- 数据库初始化 SQL 可挂载到 /docker-entrypoint-initdb.d/,首次启动自动执行
- 注意 Windows/macOS 上挂载卷的路径格式,避免权限或换行符问题
调试和日常操作别绕路
跑起来只是开始,日常开发还得能进容器、查日志、连数据库、开 Xdebug。
- 用 docker compose exec php bash 进入 PHP 容器执行 composer、artisan、phpunit
- Nginx 和 PHP 日志都挂载到本地目录(如 ./logs/nginx),方便 tail -f 实时看错误
- 加 extra_hosts: ["host.docker.internal:host-gateway"],让 PHP 容器能访问宿主机服务(如本地 Redis 或第三方 API)
- 开发环境启用 xdebug,并在 IDE(如 PhpStorm、VS Code)配好监听,断点调试一步到位



















