Docker 部署 PHP 全手册

1. PHP 简介

PHP 是最流行的后端脚本语言之一,广泛应用于网站与 Web 应用开发。结合 Docker,可轻松实现“一键运行 PHP 环境”,避免复杂的系统配置。

核心特点

  • 快速开发:语法简单、上手快,拥有丰富框架(Laravel、ThinkPHP、WordPress 等)。
  • 高兼容性:支持 Nginx、Apache、MySQL、Redis 等主流组件。
  • 生态完善:Composer 管理依赖、扩展丰富(GD、PDO、mbstring 等)。
  • 轻量可移植:通过 Docker 封装环境,避免“本地能跑、服务器不行”的问题。

典型应用场景

场景类型 示例 适用用户
PHP 基础学习 编写 PHP 脚本、练习语法 新手
Web 服务开发 Laravel、ThinkPHP、WordPress 中级
生产部署 企业级 API 服务、CMS 平台 高级

官方资源

  • 国内镜像页:https://xuanyuan.cloud/r/library/php
  • 官方文档:https://www.php.net/docs.php

2. 部署前准备

在开始部署前,请确保本机具备以下环境。

2.1 硬件建议

资源类型 开发环境 生产环境 说明
CPU ≥ 2 核 ≥ 4 核 多线程加快脚本执行速度
内存 ≥ 2 GB ≥ 8 GB PHP + Web 服务需足够内存
硬盘 ≥ 10 GB ≥ 50 GB 建议使用 SSD 提升 IO 性能

2.2 软件依赖

  • Docker:≥ 24.0.0
    检查版本:

    docker --version
    
  • Docker Compose:≥ v2.26.1
    检查版本:

    docker compose version
    

2.3 一键安装脚本

若你的系统尚未安装 Docker,请先一键安装:

Linux Docker & Docker Compose 一键安装

一键安装配置脚本(推荐方案):
该脚本支持多种 Linux 发行版,支持一键安装 Docker、Docker Compose 并自动配置轩辕镜像加速源。

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

2.4 网络与安全

  • 端口:PHP-FPM 默认不暴露端口,需配合 Nginx/Apache 映射。
  • 镜像加速:推荐使用 轩辕镜像(避免国外镜像拉取缓慢或失败)。

3. 下载 PHP 镜像

3.1 使用轩辕镜像(推荐)

# 拉取 PHP 8.2 镜像(含 FPM)
docker pull xxx.xuanyuan.run/library/php:8.2-fpm# (可选)改名为标准官方名称
docker tag xxx.xuanyuan.run/library/php:8.2-fpm php:8.2-fpm
docker rmi xxx.xuanyuan.run/library/php:8.2-fpm

3.2 使用官方镜像(备用方案)

docker pull php:8.2-fpm

3.3 验证镜像是否下载成功

docker images

输出示例:

REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
php          8.2-fpm    5b437a0916a1   3 weeks ago    500MB

4. 快速上手:运行 PHP 环境

4.1 方式1:直接运行 PHP 容器(无网页,仅命令行)

docker run -it --rm php:8.2-fpm php -v

输出 PHP 版本信息即表示成功。

4.2 方式2:运行可访问网页的 PHP 环境(推荐)

步骤1:创建项目目录

mkdir -p ~/php-demo/www
cd ~/php-demo/www

步骤2:编写示例 PHP 文件

创建文件 index.php

<?php
phpinfo();
?>

步骤3:创建 docker-compose.yml

version: "3.8"
services:php:image: php:8.2-fpmcontainer_name: php-fpmvolumes:- ./www:/var/www/htmlrestart: unless-stoppednginx:image: nginx:latestcontainer_name: php-nginxports:- "8080:80"volumes:- ./www:/var/www/html- ./nginx.conf:/etc/nginx/conf.d/default.confdepends_on:- phprestart: unless-stopped

步骤4:创建 nginx.conf 文件

server {listen 80;server_name localhost;root /var/www/html;index index.php index.html;location / {try_files $uri $uri/ /index.php?$query_string;}location ~ \.php$ {include fastcgi_params;fastcgi_pass php:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}
}

步骤5:启动容器

docker compose up -d

步骤6:验证运行结果

浏览器访问:

http://localhost:8080

若出现 PHP 信息页面(蓝紫色表格),即部署成功 🎉


5. 安装扩展(如 pdo_mysql、gd、mbstring)

进入容器执行:

docker exec -it php-fpm bash

在容器内运行:

docker-php-ext-install pdo_mysql gd mbstring

安装完成后重启容器:

exit
docker compose restart php

验证扩展是否启用:

docker exec -it php-fpm php -m

输出包含 pdo_mysql, gd, mbstring 即代表安装成功。


6. 挂载项目目录(让代码实时生效)

上文已将宿主机目录 ./www 挂载到容器内 /var/www/html,因此:

  • 修改本地 index.php 后,无需重启容器,刷新网页即可看到效果;
  • 新建 test.php 文件同样会被自动加载。

7. 与数据库联动(PHP + MySQL)

7.1 修改 docker-compose.yml,新增 MySQL 服务

version: "3.8"
services:php:image: xxx.xuanyuan.run/php:8.2-fpmcontainer_name: php-fpmvolumes:- ./www:/var/www/htmlrestart: unless-stoppeddepends_on:- mysqlnginx:image: xxx.xuanyuan.run/nginx:latestcontainer_name: php-nginxports:- "8080:80"volumes:- ./www:/var/www/html- ./nginx.conf:/etc/nginx/conf.d/default.confrestart: unless-stoppedmysql:image: xxx.xuanyuan.run/mysql:8.0container_name: php-mysqlenvironment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: demoMYSQL_USER: appuserMYSQL_PASSWORD: app123volumes:- mysql-data:/var/lib/mysqlrestart: unless-stoppedvolumes:mysql-data:

7.2 测试数据库连接

创建 www/dbtest.php

<?php
$dsn = 'mysql:host=mysql;dbname=demo;charset=utf8';
$user = 'appuser';
$pass = 'app123';try {$pdo = new PDO($dsn, $user, $pass);echo "✅ 数据库连接成功";
} catch (PDOException $e) {echo "❌ 数据库连接失败:" . $e->getMessage();
}
?>

访问:

http://localhost:8080/dbtest.php

若出现 “✅ 数据库连接成功”,说明 PHP 与 MySQL 容器通信正常。


8. 生产部署建议

类别 建议配置
安全 不暴露 8080 端口至公网;通过 Nginx 反代 HTTPS;关闭 phpinfo 页面
性能 启用 OPcache:docker-php-ext-install opcache
日志 将日志目录挂载到宿主机(/var/log/nginx/var/log/php
备份 MySQL 定期 mysqldump 备份;PHP 代码使用 Git 管理
监控 使用 docker stats 或 Prometheus 监控 CPU、内存、IO

9. 常见问题排查

问题 原因 解决方法
网页 502 Bad Gateway PHP 容器未启动 执行 docker ps 检查 php-fpm 状态
PHP 文件被下载而非解析 Nginx 未正确配置 fastcgi 检查 nginx.conf 中 fastcgi_pass php:9000
数据库连接失败 主机名写错 使用容器名 mysql 而非 localhost
修改 PHP 文件无效 未挂载宿主目录 检查 volumes 是否设置正确
PHP 扩展未生效 未重启容器 运行 docker compose restart php

10. 后续学习路径

  • 新手:学习 PHP 语法 → 用 Docker 跑 PHP+MySQL → 尝试 WordPress/Laravel
  • 进阶者:研究 PHP-FPM 性能优化 → 使用 Supervisor 管理进程 → 部署 Nginx + PHP + Redis 架构
  • 高级用户:实现 CI/CD 自动化构建(GitHub Actions + Docker)→ 配置多环境(dev/staging/prod)

✅ 至此,你已成功用 Docker 构建出可运行的 PHP Web 环境。
该教程从 镜像拉取 → PHP 环境运行 → 与 Nginx/MySQL 联动 全流程覆盖,新手照做即可跑通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年最新推荐包装印刷制造厂家排行榜:聚焦设备、团队与服务的优质品牌精选定制/设计/优质/品质包装印刷厂家推荐

在包装印刷行业快速发展的当下,企业对优质包装服务的需求日益提升,但市场上品牌众多、实力参差不齐,给企业选择带来极大困扰。部分企业设备落后导致印刷精度不足、工艺单一,难以满足个性化定制需求;有些团队专业能…

2025 年国内发电机厂家最新推荐排行榜:涵盖多功率型号,助力精准选购优质发电机品牌指南

在 2025 年工业生产、基础设施建设、应急保障等领域对电力供应需求持续增长的背景下,发电机作为核心供电设备,市场需求不断攀升。然而,当前发电机市场品牌众多,不同品牌在产品质量、技术水平、服务能力上差异明显,…

zedboard + AD-FMCOMMS3-EBZ AD9361 (五) 收发单音信号 测试 / Tone

zedboard + AD-FMCOMMS3-EBZ AD9361 (五) 收发单音信号 测试 / Tone Receive Tone Signal Using Analog Devices AD9361/AD9364

VSCode 使用默认profile打开文件

VSCode 本身的定位就是文本编辑器,只是通过各种插件才实现了 IDE 的功能。 如果想要把 VSCode 当作 IDE 和文本编辑器同时使用,就需要注意 profile 切换的问题。profile 是 VSCode 的一个功能,可以通过多首选项管理…

2025 年最新推荐国际物流服务公司权威排行榜:聚焦海运快递跨境专线,助力商家选优质物流伙伴

在全球化贸易不断推进、跨境电商规模持续扩大的背景下,国际物流成为商家连接全球市场的关键支撑。然而,当前市场上物流企业数量众多,服务质量、时效、价格差异显著,商家面临清关延误、时效不稳定、售后无保障等诸多…

2025年国内高温隧道炉知名品牌推荐,固化炉,回流焊炉,连续式烘干线厂家供货商!

上海柏毅试验设备有限公司 推荐指数☆☆☆☆☆ 推荐理由:硬核品质、智慧内核、前瞻设计 公司于2010年在上海正式创立,生产基地总占地面积40余亩。是国内专注于环境试验设备研发、生产、销售与服务的专精特新、高新技…

【数据结构】不带表头节点的双向链表的基本操作 - 实践

【数据结构】不带表头节点的双向链表的基本操作 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

VSCode Java 单元测试没有运行按钮

问题 在使用 VSCode 开发 Java 时,可能会遇到单元测试没有运行按钮的情况,如下图:可以看到,此时的单元测试没有运行按钮。 Testing 栏也是一片空白:解决 这其实是因为设置导致的,取消勾选如下的设置即可解决:天…

2025 北京宽带安装公司最新推荐榜:专业口碑双优服务商汇总,企业家庭装机必看指南

随着北京数字经济加速推进,企业云办公、家庭高清娱乐等需求对宽带的稳定性、响应速度提出更高要求,宽带安装服务已成为保障生产生活的核心基础设施。但当前市场痛点突出:部分服务商安装响应滞后,老旧小区与远郊区域…

Qt实现UVC摄像头捕获

一、环境配置开发环境: Qt 5.15+ (MSVC 2019编译器) Windows/Linux依赖配置: # .pro文件配置 QT += multimedia multimediawidgets LIBS += -lQt5Multimedia二、核心代码实现 1. 设备枚举与选择 // 获取所有UVC摄像头…

2025年10月17日信息公布:太阳能路灯厂家最新推荐榜~覆盖乡村户外、单臂双臂、农村及5-8米LED款,精选优质路灯企业

摘要 随着城市化进程加速和智慧城市建设推进,路灯行业在2025年迎来新一轮发展高潮,市场需求持续增长,产品技术不断升级。本文基于行业数据、用户口碑和专家评审,为您呈现最新路灯品牌排行榜单,旨在帮助工程采购商…

基于Java+Springboot+Vue开发的新闻管理系统源码+运行步骤

项目简介该项目是基于Java+Springboot+Vue开发的新闻管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习…

Linux 环境变量与软件安装

Linux 环境变量与软件安装 环境变量 环境变量是 Linux 系统中定义的动态参数,用于指定系统或应用程序的运行路径、配置信息等,其中 PATH 变量 是最核心的环境变量之一,决定了系统在哪些目录下查找可执行指令。 环境…

Python 将多个DataFrame合并到一个Excel工作表的sheet中有几种方法

在Python中,将多个DataFrame合并到一个Excel工作表的sheet中有几种方法。以下是常见的几种实现方式: 方法1:直接合并DataFrame后保存import pandas as pd# 示例数据 df1 = pd.DataFrame({A: [1, 2, 3], B: [4, 5, 6…

基于ZigBee的无线传感器组网

一、实验设备与工具设备类型 型号/参数 功能说明主控芯片 CC2530F256 集成ZigBee射频与8051内核传感器模块 DHT11温湿度传感器 采集环境参数网关设备 USB-ZigBee适配器 实现PC与ZigBee网络通信开发环境 IAR Embedded W…

2025 涂料供应厂家最新推荐榜:权威品牌测评 + 选购指南,家装工程选品必看

2025 年涂料行业迎来技术迭代与品牌洗牌,消费者对环保性、功能性的需求从基础达标升级为精准适配,零 VOC、净醛抗菌、耐候定制等高端需求占比同比提升 30%。但市场中既有深耕多年的实力企业,也有缺乏核心技术的跟风…

2025 年中走丝线切割源头厂家最新推荐排行榜发布,解读优质厂家技术亮点与选择攻略伺服/高效/自动中走丝线切割厂家推荐

引言当前工业制造领域中,中走丝线切割设备作为模具制造、汽车零部件加工、精密器械生产等关键行业的核心装备,其质量与性能直接决定企业生产效率与产品精度。但市场上源头厂家数量繁杂,实力差距悬殊,部分厂家缺乏核…

2024浙江省省赛决赛wp

rce `<?php echo "get只接受code欧,flag在上一级目录<br>"; $filename = __FILE__; highlight_file($filename); if(isset($_GET[code])){ if (!preg_match(/session_id\(|readfile…

【解决办法】pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败”

一、出现背景 使用marker-pdf报错:pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败” 二、可能原因及其解决办法 1. dll没有安装或者有问题 用dll修复工具尝试安装修复dll,一些免费的工具,如:金山…

23省赛初赛

23质量比24高我只能说 easy php 简单反序列化__debuginfo()魔术方法打印所需调试信息,反序列化时候执行! 链子如下: BBB::__debuginfo()->CCC::__toString()->AAA::__call() AI运行代码 php EXP: <?php …