核心是定制dockerfile构建可复现镜像,再用docker-compose编排服务:选php:8.2-apache(开发)或php:8.2-fpm-alpine(生产),安装pdo_mysql、gd、opcache等扩展,挂载php.ini、代码和nginx配置,通过自定义网络使php连接mysql服务名,禁用root运行并按环境开关xdebug。

用 Docker 部署 PHP 项目,核心是构建可复现、贴近生产、开箱即用的镜像。不推荐直接运行官方裸镜像,而应通过 Dockerfile 定制基础环境,再用 docker-compose 编排服务。关键动作就三步:选对基础镜像、装齐必要扩展、配好运行时参数。
选镜像:按场景匹配版本与系统
基础镜像决定体积、兼容性和维护成本:
- 开发验证:用
php:8.2-apache—— 自带 Apache 和 mod_php,docker run -p 8080:80 -v $(pwd)/src:/var/www/html php:8.2-apache一条命令就能跑起页面 - 生产部署:优先选
php:8.2-fpm-alpine—— Alpine 系统镜像仅 ~50MB,启动快、攻击面小;需额外配 Nginx 容器反向代理到php:9000 - 遗留系统:如 PHP 5.6 + Oracle,不能依赖官方镜像(已下线),需基于
centos:7手动编译 PHP 并安装 oci8 扩展,再用docker commit固化为私有镜像
装扩展:用标准命令批量启用常用模块
官方镜像默认只含核心扩展。PDO、GD、OPcache、Redis 等必须显式安装:
- 在 Dockerfile 中写明依赖和安装逻辑:
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev && \ docker-php-ext-configure gd --with-freetype --with-jpeg && \ docker-php-ext-install pdo_mysql gd opcache mysqli mbstring exif && \ pecl install redis && docker-php-ext-enable redis
- 配置 OPcache 提升性能:
RUN echo "opcache.enable=1\nopcache.memory_consumption=128" > /usr/local/etc/php/conf.d/opcache.ini - 注意 Alpine 镜像用
apk add装系统库,Debian/Ubuntu 镜像才用apt-get
配生产:挂载、网络与安全细节不能省
本地能跑 ≠ 生产能用。这些配置直接影响稳定性与安全性:
-
PHP 配置文件:不要硬编码进镜像。用
-v ./php.ini:/usr/local/etc/php/php.ini:ro挂载,方便不同环境切换upload_max_filesize、memory_limit等 -
数据库连接:PHP 代码中写
mysql:host=mysql,不是localhost;确保docker-compose中定义了mysql服务,并共用自定义网络 -
Xdebug 调试:开发环境启用,生产禁用。Dockerfile 中加条件判断,或用多阶段构建分离 dev/prod 镜像;远程调试需设
XDEBUG_CONFIG="client_host=host.docker.internal"(Docker Desktop 支持) -
权限与用户:避免容器内以 root 运行。添加
RUN useradd -u 1001 -r -m -d /home/www phpuser && chown -R phpuser:www-data /var/www/html,并在php-fpm.conf中指定user = phpuser
跑起来:docker-compose 统一管理更可靠
单容器命令难维护,多服务必须靠 docker-compose.yml:
- 定义三个服务:nginx(静态服务+反代)、php-fpm(业务逻辑)、mysql(数据存储)
- 用
volumes挂载代码和配置:./src:/var/www/html、./nginx/conf.d:/etc/nginx/conf.d:ro - 用
networks创建自定义网络,服务间直接用服务名通信,无需暴露数据库端口给主机 - 启动只需:
docker-compose up -d,日志查docker-compose logs -f nginx,进容器调试用docker-compose exec php-fpm sh
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











