这是一个基于 Docker 的 PHP 开发环境(DNMP: Docker + Nginx + MySQL + PHP),遵循 "精简原则",尽量最小定制化,将定制工作交给使用者。通过简单的配置,提供灵活的开发环境。
- ✅ 简单易用:开箱即用,配置清晰
- ✅ 现代化:兼容最新 Docker Compose 格式
- ✅ 灵活配置:通过环境变量轻松调整版本和端口
- ✅ 性能优化:使用缓存挂载,提升开发体验
- ✅ 多版本支持:支持 PHP 7.2+、MySQL 5.7/8.0、Redis 等
.
├── .env # 环境变量配置文件(需要从 env.example 复制)
├── env.example # 环境变量配置示例文件
├── Dockerfile # PHP 镜像构建脚本
├── docker-compose.yml # Docker Compose 配置文件
├── config/
│ ├── nginx/ # Nginx 配置目录
│ │ └── conf.d/ # 站点配置文件(在此添加新项目配置)
│ ├── php/ # PHP 配置文件
│ │ ├── php72.ini # PHP 7.2 配置
│ │ └── php73.ini # PHP 7.3 配置
│ └── redis.conf # Redis 配置文件
├── data/ # 数据持久化目录
│ ├── composer/ # Composer 缓存
│ ├── mysql/ # MySQL 数据
│ └── redis/ # Redis 数据
├── logs/ # 日志目录
│ └── nginx/ # Nginx 日志
└── resources/ # PHP 扩展源码包
├── redis-5.1.1.tgz
├── mongodb-1.6.0.tgz
├── xdebug-3.0.1.tgz
└── ...
- PHP 7.2+ (FPM) - 支持多版本
- Nginx (Alpine) - Web 服务器
- MySQL 8.0 - 数据库
- Redis 7 - 缓存/会话存储
- RabbitMQ - 消息队列(可选)
- SFTP - 文件传输服务(可选)
- Docker Desktop 或 Docker Engine 20.10+
- Docker Compose 2.0+
# 复制环境变量示例文件
cp env.example .env
# 编辑 .env 文件,根据实际情况修改配置
# 主要配置项:
# - WEB_ROOT: 项目根目录路径
# - PHP_VERSION: PHP 版本
# - MYSQL_ROOT_PASSWORD: MySQL root 密码
# - 各服务端口配置建议将 DNMP 项目放在与其他开发项目的平级目录:
projects/
├── laravel/ # Laravel 项目
├── symfony/ # Symfony 项目
└── dnmp/ # 本环境(DNMP)
# 进入 dnmp 目录
cd dnmp
# 启动所有服务
docker compose up -d
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f在 config/nginx/conf.d/ 目录下添加站点配置文件,参考 larave.conf 示例。
# 重启所有服务
docker compose restart
# 重启单个服务(如 nginx)
docker compose restart nginx
# 重新构建 PHP 镜像
docker compose build php72在宿主机 /etc/hosts 文件中添加:
127.0.0.1 laravel.test
127.0.0.1 api.test
或者使用 dnsmasq(见附录)。
在项目配置文件中使用容器名称作为主机名:
# Laravel .env 示例
DB_CONNECTION=mysql
DB_HOST=mysql # 使用容器名,不是 127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
REDIS_HOST=redis # 使用容器名
REDIS_PORT=6379
REDIS_PASSWORD=null在 docker-compose.yml 中取消注释 php73 服务,然后:
# 启动 PHP 7.3 服务
docker compose up -d php73
# 在 Nginx 配置中修改 fastcgi_pass
# fastcgi_pass php73:9000;# 进入 PHP 容器
docker compose exec php72 bash
# 在容器内执行 PHP 命令
docker compose exec php72 php -v
docker compose exec php72 composer install
# 在容器内执行 Composer
docker compose exec php72 composer require package/name扩展已预装在 Dockerfile 中,如需添加新扩展:
- 将扩展源码包放入
resources/目录 - 修改
Dockerfile添加安装步骤 - 重新构建镜像:
docker compose build php72
查看已安装扩展:
docker compose exec php72 php -m# 查看所有服务日志
docker compose logs
# 查看特定服务日志
docker compose logs nginx
docker compose logs php72
docker compose logs mysql
# 实时跟踪日志
docker compose logs -f nginx# 备份 MySQL 数据
docker compose exec mysql mysqldump -u root -p --all-databases > backup.sql
# 备份 Redis 数据
docker compose exec redis redis-cli SAVE
cp data/redis/dump.rdb backup/使用 dnsmasq 可以自动将所有 .test 域名解析到本地:
# 安装 dnsmasq
brew install dnsmasq
# 配置 dnsmasq
echo 'address=/.test/127.0.0.1' >> /usr/local/etc/dnsmasq.conf
# 创建 DNS 解析器
sudo mkdir -v /etc/resolver
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'
# 启动 dnsmasq
brew services start dnsmasqXdebug 3.x 已预装在镜像中,配置位于 config/php/php72.ini。
在请求中添加参数:XDEBUG_TRIGGER=1
或使用浏览器扩展:
-
Settings → Languages & Frameworks → PHP → Servers
- Name:
laravel.test - Host:
laravel.test - Port:
80 - Debugger:
Xdebug
- Name:
-
Settings → Languages & Frameworks → PHP → Debug
- Port:
9003(Xdebug 3.x 默认端口)
- Port:
参考视频:PhpStorm Xdebug 配置
在 docker-compose.yml 中已配置 extra_hosts,PHP 容器可以通过域名访问其他服务:
extra_hosts:
- "api.test:nginx" # 使用 nginx 容器名,自动解析在 PHP 代码中直接使用服务名:
// 访问 MySQL
$host = 'mysql'; // 容器名
$port = 3306;
// 访问 Redis
$redis = new Redis();
$redis->connect('redis', 6379); // 容器名在 ~/.zshrc 或 ~/.bashrc 中添加:
# Docker Compose 别名
alias dup='docker compose up -d'
alias ddown='docker compose down'
alias drestart='docker compose restart'
alias dlogs='docker compose logs -f'
alias dexec='docker compose exec'
# 快速进入 PHP 容器
alias dphp='docker compose exec php72 bash'# 查看服务状态
docker compose ps
# 查看详细日志
docker compose logs [service_name]
# 检查端口占用
lsof -i :80
lsof -i :3306# 修复数据目录权限
sudo chown -R $USER:$USER data/
sudo chmod -R 755 data/# 重建网络
docker compose down
docker network prune
docker compose up -d- ✅ 更新到 Docker Compose 最新格式(移除 version)
- ✅ 优化 Dockerfile,使用最佳实践
- ✅ 改进网络配置,移除静态 IP 依赖
- ✅ 添加环境变量示例文件
- ✅ 更新服务版本到最新稳定版
- ✅ 优化卷挂载,使用缓存模式提升性能
- ✅ 改进文档,添加更多使用示例
MIT License