Docker 部署 PHP 全手册

docker系列--安装PHP 1、在 /usr/local/bin/ 目录下新建一个PHP的文件。7、本机配置容器内PHP可执行脚本.实现在本机就能执行php文件。创建一个调用我们的 PHP 容器的 Bash 文件。最后在本机执行php -v就能看到效果了。3.创建目录存储php配置文件和日志。4.从容器中复制配置文件。 阅读详情

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 平台高级

官方资源


2. 部署前准备

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

2.1 硬件建议

资源类型开发环境生产环境说明
CPU≥ 2 核≥ 4 核多线程加快脚本执行速度
内存≥ 2 GB≥ 8 GBPHP + 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-fpm
    container_name: php-fpm
    volumes:
      - ./www:/var/www/html
    restart: unless-stopped

  nginx:
    image: nginx:latest
    container_name: php-nginx
    ports:
      - "8080:80"
    volumes:
      - ./www:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    restart: 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-fpm
    container_name: php-fpm
    volumes:
      - ./www:/var/www/html
    restart: unless-stopped
    depends_on:
      - mysql

  nginx:
    image: xxx.xuanyuan.run/nginx:latest
    container_name: php-nginx
    ports:
      - "8080:80"
    volumes:
      - ./www:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    restart: unless-stopped

  mysql:
    image: xxx.xuanyuan.run/mysql:8.0
    container_name: php-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: demo
      MYSQL_USER: appuser
      MYSQL_PASSWORD: app123
    volumes:
      - mysql-data:/var/lib/mysql
    restart: unless-stopped

volumes:
  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 GatewayPHP 容器未启动执行 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 联动 全流程覆盖,新手照做即可跑通。

Docker系列五:docker部署PHP 这里给大家推荐一款免费迭代 二开便捷的商城项目:源码直通车>>> docker pull php 查找Docker Hub上的 php 镜像: 可以通过 Sort by 查看其他版本的 php,默认是最新版本php:latest。 此外,我们还可以用 docker search php 命令来查看可用版本: runoob@runoob:~/php-fpm$ docker search php NAME DESCRIPTION... 阅读详情

相关推荐

docker搭建PHP环境

创建容器:docker run --name myphp -v /docker/nginx/www/myphp:/www/myphp -d c5fdabeef32a创建运行php的容器,名为myphp。创建conf、conf.d目录 mkdir -p /docker/nginx/conf/conf.d,一定要用mkdir -p递归创建目录,即使上级目录不存在,会按目录层级自动创建目录。先创建ngix文件夹存放等会php文件要挂载的目录,我创建在/docker/nginx/www/myphp目录的。

2303_77497881的博客 861

docker搭建php

PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在端执行的,尤其适用于Web开发并可嵌入中。PHP语法学习了,吸纳和多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web。PHP同时支持面向对象和的开发,使用上非常灵活。

bg2077的博客 1762

macOs安装docker且在docker上部署nginx+php

v ~/project/nginx/conf.d:/etc/nginx/conf.d 将主机的 ~/project/nginx/conf.d 目录挂载到容器的 /etc/nginx/conf.d。-v ~/project/www:/usr/share/nginx/html 将主机的 ~/project/www 目录挂载到容器的 /www。–link myphp:php 将 myphp 容器的网络并入 nginx 容器,实现容器间的通信。如果想将docker内的文件与docker外的文件相关关联。

m0_74823364的博客 1315

Docker搭建PHP运行环境

Docker搭建PHP运行环境

Super乐De博客 7855

docker 部署PHP网页

docker 部署PHP网页 准备好两个镜像 然后创建两个容器: docker run --name="apachedemo" -p 80:80 -d nimmis/apache-php5 docker run --name mysqldemo -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server:latest docker ps 查看两个容器的状态,如果docker ps 没有说明容器没有起来

yanfive 1359

Docker 5分钟快速部署PHP应用

本文提供了一份5分钟快速使用Docker运行PHP应用的入门指南。首先介绍通过Docker官网安装Docker,并创建项目目录;然后详细说明如何编写PHP文件和Docker配置文件;接着指导构建Docker镜像和运行容器;最后验证应用是否正常运行。整个过程简单清晰,无需配置本地PHP环境,适合Docker新手快速上手。还提供了常见问题排查方法和进一步学习资源,帮助用户后续扩展应用功能。

dujianhuaw的博客 941

PHP 全栈开发学习手册:从基础到高级实战、Laravel、Redis、面试题完整版

这是一份完整的 PHP 全栈开发学习文档,内容涵盖 PHP 基础语法、数组函数、面向对象、MySQL、PDO、MVC、Composer、Laravel、Redis、JWT、Docker、Swoole、高并发优化、API 开发、电商与博客项目实战,以及大量 PHP 面试高频题与答案。同时整理了 Laravel、ThinkPHP、Symfony、Yii2、Hyperf 等主流框架介绍,并附带 PHP 官方文档、学习资源、开发工具和常用技术网站链接,适合零基础学习、面试准备和项目开发参考。

zzwokstyle的博客 437

Ubuntu上安装Claude Code CLI:从环境配置到排错全攻略

在Linux开发环境中,命令行工具的安装与配置是开发者绕不开的基础技能。无论是AI编程助手还是其他CLI工具,其运行都依赖于正确的运行时环境和包管理机制。以Node.js生态为例,版本管理器nvm解决了多版本切换的痛点,npm则负责全局包的安装与依赖解析。理解PATH环境变量的执行逻辑、全局bin目录的作用以及权限控制,是排查“命令找不到”或“EACCES”错误的关键。这些基础知识应用广泛,从本地开发到服务器部署都至关重要。本文以Ubuntu系统上安装Anthropic的Claude Code CLI为例,

weixin_28842367的博客 273

docker部署PHP项目

docker部署web项目需要用到几个服务:php,nginx等等。目前本文只用了nginx和php。 首先是拉取镜像 docker pull php:5.6-fpm docker pull nginx 启动之前先创建一个docker网络,使用docker来连接多个容器。 docker network create -d bridge php-net 先启动PHP容器 docker run -...

qq_38711879的博客 5236

simulink中无迹卡尔曼(UKF)模块使用

simulink的UKF模块简单说明

qq_41059950的博客 2824

HAL库移植实战:解决‘HAL_StatusTypeDef‘未定义报错的3个关键步骤

本文针对STM32开发中从标准库向HAL库移植时常见的'HAL_StatusTypeDef'未定义报错,提供了三个关键解决步骤:首先确保正确包含头文件入口,其次检查并配置模块使能宏,最后注意避免与标准库的同名结构体混用。文章通过实战案例解析了HAL库的模块化设计理念,帮助开发者高效解决混合编程中的编译问题。

book8的博客 210

docker部署php环境运行web项目

写这篇文章的目的一个是自己做个笔记,以防以后忘记,再一个网上关于运行php容器到部署web项目的资料实在是少,都是互相复制一下,无法真正运用到实际生产环境中。 为什么要用docker,docker基本的一些命令不再本文章的讨论范围。 docker部署web项目需要用到几个服务:php,nginx,redis等等,本篇文章讲一下PHP,nginx以及redis的使用,更多的服务流程跟启动这三个服...

a516972602的博客 2万+

MFC+Modbus-Tcp协议实现温湿度传感器采集

本文简单介绍MFC使用-Tcp通信实现系列MODBUSTCP型温湿度传感器采集数据。

zhigang_zhao的博客 2832

如何使用docker部署php服务

如何使用docker部署php服务,简单来说只需要三个步骤。1、使用docker运行openresty容器;2、部署php服务;3、配置域名;因为演示的原因,php项目只有一个index.php文件。在使用过程中可以替换成真正的项目代码。

zhangbin1988的专栏 2772

PCL 中实现平面模型分割【2026最新版】

RANSAC分割平面。博客长期更新,最近一次更新时间为:2026年5月4日。

点云侠的博客 38万+

3 ATK2(AUTOSAR OS)代码移植-目标硬件及编译环境简介

该部分介绍ATK2代码移植的目标硬件以及编译环境

xiaoduanduansad的博客 721

一次性部署:使用Docker部署PHP应用

一次性部署:使用Docker部署PHP应用 在现代软件开发中,Docker已成为一种流行的工具,能够简化应用程序的部署和管理。通过使用容器化技术,开发者可以确保应用在不同环境中一致性运行,避免了“在我机器上可以运行”的问题。本文将详细介绍如何使用Docker一次性部署一个PHP应用,包括环境准备、Dockerfile编写、...

qq_35485206的博客 1210

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 208

docker如何一键部署php项目教程

docker 部署php项目步骤: 1.docker 安装php docker pull php:5.6-fpm 2.启动php docker run -d -v /root/nginx/www:/var/www/html -p 9000:9000 --name ryx_php php:5.6-fpm 说明: -d 让容器在后台运行 -p 添加主机到容器的端口映射 -v /root/nginx/www(服务器目录):/var/www/html(docker挂载目录) –name ryx_phpfpm : .

EverLJS的博客 8911

Lammps纳米压痕接触面积—Matlab接触面积计算(两种方法)

Lammps纳米压痕接触面积计算

Rockyoung 5449

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

使用 docker 打包部署 php 应用

当项目开发逐渐趋于完成时,需要准备大批量集群部署,重复的环境安装、配置和源码上传工作,虽然没有难度,但繁琐无聊又低效,如果将项目发版版本打包成对应的 docker 镜像,我们只需在每台应用服务器上执行拉取镜像、创建容器、启动容器即可(三行超级简单命令,Walle,Jenkins 轻松全自动化搞...

chennutou1145的博客 4989

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

docker一键部署php开发环境

占坑

东门吸雪 7175

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

docker项目部署 php_如何使用Docker部署PHP开发环境

本文主要介绍了如何使用Docker构建PHP的开发环境,文中作者也探讨了构建基于Docker的开发环境应该使用单容器还是多容器,各有什么利弊。推荐PHP开发者阅读。希望对大家有所帮助。环境部署一直是一个很大的问题,无论是开发环境还是生产环境,但是 Docker 将开发环境和生产环境以轻量级方式打包,提供了一致的环境。极大的提升了开发部署一致性。当然,实际情况并没有这么简单,因为生产环境和开发环境的...

weixin_32946431的博客 976

Docker 安装 PHP并与Nginx的部署

安装 PHP 镜像 查找 Docker Hub 上的 php 镜像: 此外,我们还可以用 docker search php 命令来查看可用版本: 这里我们拉取官方的镜像,标签为7.3.24-fpm-stretch docker pull php:7.3.24-fpm-stretch 等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为7.3.24-fpm-stretch的镜像。 Nginx + PHP 部署 Nginx 部署可以查看本人博客中:Docker 安装 N

weixin_39218464的博客 2262
上一篇: 手把手教你在 Docker 中部署 Home Assistant
下一篇: Docker 部署 MinIO 全指南
java_logo
博客等级 码龄18年 326粉丝 240原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值