Docker部署php:Docker部署PHP环境

Docker部署PHP环境:从零开始的完整步骤

很多新手在配置PHP运行环境时,总被手动编译、扩展冲突、路径混乱等问题劝退。
Docker部署PHP 能彻底隔离环境,换服务器也能一键还原。
本文从零开始,带你完整跑通一个带Nginx + PHP-FPM + MySQL的容器化PHP应用。

准备工作:检查你的服务器

你需要一台安装了Linux(Ubuntu/CentOS均可)的服务器,并确保 DockerDocker Compose 已安装。
如果还没装,执行以下命令(以Ubuntu为例):

# 自动安装Docker
curl -fsSL https://get.docker.com | bash
# 启动Docker并设置开机自启
sudo systemctl start docker && sudo systemctl enable docker
# 安装Docker Compose(可选,但强烈推荐)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

安装完成后运行 docker version 确认版本信息。
如果出现 Cannot connect to the Docker daemon,说明当前用户不在docker用户组,执行 sudo usermod -aG docker $USER 并重新登录即可。

搭建 Docker 部署 PHP 的核心结构

Docker部署PHP 最常见的方式是使用 docker-compose.yml 同时管理 Nginx、PHP-FPM 和 MySQL,这样一条命令就能启动所有服务。

1. 创建项目目录

mkdir ~/php-project && cd ~/php-project
mkdir -p nginx/conf.d php www mysql/data

2. 编写 php 和 nginx 配置文件

nginx/conf.d/ 下新建 default.conf,内容如下:

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

php/ 下新建一个 Dockerfile(可省略,直接用官方镜像也可),我们直接使用 php:8.2-fpm 镜像。

3. 编写 docker-compose.yml

在项目根目录创建 docker-compose.yml

version: '3.8'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www/html
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - php
  php:
    image: php:8.2-fpm
    volumes:
      - ./www:/var/www/html
    # 如果需要连接MySQL,可以在此安装pdo_mysql扩展
    # 推荐在Dockerfile中处理,这里不做赘述
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql

4. 启动容器

docker-compose up -d

等待镜像拉取并启动完成后,访问服务器IP即可看到Nginx默认页面。

避坑指南:Docker部署PHP容易踩的坑

  • 权限问题:容器内的PHP-FPM默认以www-data用户运行,而你的代码文件如果属主是root,可能导致无法写入上传目录。推荐在宿主机把 www/ 目录属主改为 www-data:www-data(UID 82)。
  • 扩展缺失:如果你的PHP代码需要连接MySQL,默认官方镜像没有pdo_mysql扩展。你可以在 php/ 目录下新建 Dockerfile
  FROM php:8.2-fpm
  RUN docker-php-ext-install pdo_mysql

然后修改 docker-compose.yml 中的 php 服务:build: ./php 替代 image: php:8.2-fpm

  • 端口被占用:本机80端口已被Nginx占用时,修改 docker-compose.yml 中nginx的端口映射,如 "8080:80"

效果验证:跑一个PHP探针

www/ 目录下创建 info.php,内容:

访问 http://你的服务器IP/info.php,如果看到PHP信息页面,且PDO/MySQL等扩展正常,说明 Docker部署PHP 成功。
记得删除或限制 info.php 的访问权限。

如果页面直接下载或显示空白,
最常见的原因是Nginx没有正确转发PHP请求到FastCGI,
请检查 default.conf 中的 fastcgi_pass php:
9000;
是否写对了服务名。

总结与下一步

通过以上步骤,你已经用 Docker部署PHP 搭建了一个包含Nginx、PHP-FPM和MySQL的开发环境。
后续你可以拉取代码、配置域名、甚至使用Docker Compose管理多个项目。
如果遇到 502 Bad Gateway,优先检查PHP-FPM是否正常运行(docker-compose logs php)。
保持这个流程,容器化运维其实比想象中简单。

如果你正在处理 Docker部署PHP 的场景,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
新手也能搞定:Linux服务器内核模块编译全流程
下一篇
服务器游戏服务器优化:游戏服务器性能优化
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意