docker可为每个php项目提供完全隔离的运行时环境,避免版本与扩展冲突,实现镜像复用、配置版本化及生产环境一致;mac上需按芯片类型安装对应docker,通过docker-compose.yml编排多版本服务并映射不同端口。
为什么选docker搭多版本php
在mac上同时维护多个php项目时,不同项目常依赖不同php版本(比如laravel 6要php 7.2,laravel 9需php 8.1)。手动编译或用phpbrew切换容易冲突、扩展难对齐;而docker为每个版本提供完全隔离的运行时,镜像可复用、配置可版本化,还避免污染系统环境。尤其适合需要稳定复现生产环境的开发者。
基础准备:安装Docker并验证
前往Docker官网下载macOS版(注意芯片类型:Apple Silicon选ARM64版,Intel选Intel版),安装后启动应用,顶部菜单栏出现鲸鱼图标即表示服务已就绪。终端中运行以下命令确认:
-
docker --version —— 应输出类似
Docker version 27.2.0 - docker run hello-world —— 成功打印欢迎信息说明引擎正常
结构化组织:目录与配置分离
建议按功能划分本地目录,便于后续扩展。例如创建~/php-env作为根目录,内部结构如下:
-
nginx-conf/:存放各站点Nginx配置(如
sso.conf、app.conf) -
php-config-7.2/ 和 php-config-8.1/:各自独立的
php.ini和conf.d/扩展配置 -
www/:网站根目录,下设
sso.example.com/、app.example.com/ - docker-compose.yml:统一编排所有服务
这样设计后,增删一个PHP版本只需复制对应配置文件夹+修改compose,不干扰其他环境。
编写docker-compose.yml实现多版本共存
以下是一个双版本(PHP 7.2 + PHP 8.1)示例,使用官方镜像并映射不同端口:
version: "3.8"
services:
nginx:
image: nginx:alpine
ports:
- "8081:80"
- "8082:80"
volumes:
- ./www:/usr/share/nginx/html:ro
- ./nginx-conf:/etc/nginx/conf.d:ro
- ./nginx-log:/var/log/nginx
depends_on:
- php72
- php81
<p>php72:
image: php:7.2-fpm-alpine
volumes:</p>
- ./www:/usr/share/nginx/html:ro
- ./php-config-7.2/php.ini:/usr/local/etc/php/php.ini:ro
- ./php-config-7.2/conf.d:/usr/local/etc/php/conf.d:ro
php81: image: php:8.1-fpm-alpine volumes:
- ./www:/usr/share/nginx/html:ro
- ./php-config-8.1/php.ini:/usr/local/etc/php/php.ini:ro
- ./php-config-8.1/conf.d:/usr/local/etc/php/conf.d:ro
关键点:
- Nginx通过
fastcgi_pass php72:9000和fastcgi_pass php81:9000分别代理不同PHP服务 - 两个PHP容器监听各自默认的9000端口,Nginx配置中用服务名
php72/php81自动DNS解析 - 浏览器访问
http://localhost:8081/sso/index.php走PHP 7.2,http://localhost:8082/app/index.php走PHP 8.1
- Nginx通过
快速验证与日常操作
进入项目根目录后执行:
- docker-compose up -d —— 后台启动全部服务
-
docker-compose ps —— 查看各容器状态(确保都是
Up) -
curl http://localhost:8081/phpinfo.php —— 检查PHP 7.2是否生效(页面显示
PHP Version 7.2.x) - docker-compose logs -f php72 —— 实时查看PHP 7.2日志,排查启动失败原因
停止全部环境只需运行docker-compose down,数据卷默认保留,下次up可立即恢复。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











