核心是将PHP运行环境、Nginx、MySQL等拆分为独立容器,用docker-compose统一编排;需先安装Docker与Compose,再编写Dockerfile定制PHP-FPM镜像,配置nginx反代及mysql服务,最后docker-compose up启动并访问localhost验证。

用Docker部署PHP应用,核心是把PHP运行环境、Web服务器(如Nginx)、数据库(如MySQL)等拆成独立容器,再用docker-compose统一编排启动。整个过程不依赖本地环境,一次配置,随处运行。
准备基础环境
确保已安装 Docker 和 Docker Compose:
- Windows/macOS:直接下载安装 Docker Desktop,自带图形界面和 Compose,安装完重启即可
- Linux(如CentOS/Ubuntu):用包管理器一键安装,例如 CentOS 执行以下命令:
yum install -y yum-utils && yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum install -y docker-ce && systemctl enable --now docker
验证是否就绪:
立即学习“PHP免费学习笔记(深入)”;
docker --version && docker-compose --version
编写Dockerfile定制PHP容器
在项目根目录新建 Dockerfile,以 PHP 8.3-FPM 为例(轻量、适合与 Nginx 配合):
- 基于官方镜像:
FROM php:8.3-fpm-alpine - 装必要扩展:
RUN apk add --no-cache libpng-dev jpeg-dev freetype-dev icu-dev onig-dev && docker-php-ext-configure gd --with-freetype --with-jpeg && docker-php-ext-install gd mbstring pdo_mysql opcache intl - 复制代码并设权限:
COPY . /var/www/html && chown -R www-data:www-data /var/www/html - 暴露端口:
EXPOSE 9000(PHP-FPM 默认监听端口)
用docker-compose.yml编排多服务
新建 docker-compose.yml,整合 Nginx、PHP、MySQL(可选):
- Nginx 服务挂载自定义配置和代码目录,反向代理到
php:9000 - PHP 服务构建自定义 Dockerfile,并挂载代码目录(便于开发时热更新)
- MySQL 服务通过
environment设置密码和库名,用volumes持久化数据 - 所有服务加入同一网络(
app-network),自动 DNS 解析互通
示例关键片段:
version: '3.8'
services:
nginx:
image: nginx:1.25-alpine
ports: ["80:80"]
volumes:
- ./src:/var/www/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on: [php]
php:
build: .
volumes:
- ./src:/var/www/html:ro
environment:
- PHP_IDE_CONFIG=serverName=docker
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=myapp
volumes:
- mysqldata:/var/lib/mysql
volumes:
mysqldata:
启动并验证部署
在项目目录下执行:
docker-compose up -d
- 等待几秒,容器全部启动后,访问 http://localhost 即可看到 PHP 页面
- 查看日志快速排查问题:
docker-compose logs -f nginx或docker-compose logs -f php - 进入容器调试:
docker-compose exec php sh
如果项目含 Composer 依赖,建议在 Dockerfile 中用多阶段构建预装,避免每次重建都重拉包。



















