0

0

如何在Docker Compose中部署多容器PHP应用的详细步骤?

雪夜

雪夜

发布时间:2025-11-02 21:18:02

|

473人浏览过

|

来源于php中文网

原创

首先创建项目目录结构,包括app、nginx、mysql等子目录,并编写docker-compose.yml文件定义web、php、db和redis四个服务。接着在php目录下编写Dockerfile,基于php:8.2-fpm安装必要扩展并复制代码至容器。然后配置nginx.conf,设置server块监听80端口并将.php请求转发至php:9000。在docker-compose.yml中为db服务使用mysql:8.0镜像,设置环境变量并挂载本地数据目录实现持久化。添加redis服务使用redis:7-alpine镜像,可选挂载dump.rdb实现数据保存。定义自定义网络app-network供所有服务通信,并使用命名卷管理mysql和redis的数据。最后执行docker compose up -d启动服务,通过docker compose ps检查状态,访问localhost验证应用运行正常。

如何在docker compose中部署多容器php应用的详细步骤?

如果您正在构建一个基于PHP的多容器应用,并希望通过Docker Compose实现服务编排与快速部署,您需要配置多个相互协作的容器,如Web服务器、数据库和缓存服务。以下是完成该任务的具体步骤:

本文运行环境:MacBook Pro,macOS Sonoma

一、准备项目目录结构

合理的目录结构有助于分离关注点并提升可维护性。将应用程序代码、配置文件和服务定义分开放置。

1、在本地创建项目根目录,例如 my-php-app

立即学习PHP免费学习笔记(深入)”;

2、在根目录下建立 app 子目录用于存放PHP源码。

3、创建 nginx 目录存放Nginx配置文件,mysql 目录用于MySQL数据持久化。

4、在根目录创建 docker-compose.yml 文件以定义服务。

二、编写Docker Compose配置文件

Docker Compose使用YAML文件来定义多个容器服务及其依赖关系。通过此文件可以声明网络、卷和端口映射。

1、打开文本编辑器,创建 docker-compose.yml 文件。

2、定义四个服务:web(Nginx)、php(PHP-FPM)、db(MySQL)和 redis(缓存)。

3、为每个服务设置镜像名称、容器名称、端口暴露、卷挂载及启动顺序依赖。

4、确保所有服务连接到同一个自定义网络,以便内部通信。

三、配置PHP-FPM容器

PHP应用逻辑由PHP-FPM处理,需定制Docker镜像以安装必要扩展并复制代码。

1、在项目根目录创建 php/Dockerfile

2、基于 php:8.2-fpm 镜像进行构建,安装常用扩展如pdo_mysql、gd、zip等。

3、使用COPY指令将本地 app/ 目录内容复制到容器内的 /var/www/html

4、设置工作目录为 /var/www/html,并更改文件权限以避免运行错误。

四、配置Nginx服务器

Nginx作为反向代理接收HTTP请求,并将PHP请求转发给PHP-FPM容器处理。

1、在 nginx 目录中创建 nginx.conf 配置文件。

2、定义server块监听80端口,指定root目录为 /var/www/html

3、配置location块将所有.php文件请求代理到 http://php:9000

Kive
Kive

一站式AI图像生成和管理平台

下载

4、在docker-compose.yml中将本地nginx.conf挂载到容器的/etc/nginx/nginx.conf位置。

五、设置MySQL数据库服务

MySQL容器用于存储应用数据,需预设数据库名、用户和密码,并支持数据持久化。

1、在docker-compose.yml中为db服务选择官方 mysql:8.0 镜像。

2、通过environment字段设置 MYSQL_ROOT_PASSWORDMYSQL_DATABASE 等变量。

3、将本地 ./mysql/data 挂载到容器的 /var/lib/mysql 实现数据持久化。

4、暴露容器3306端口到主机以便外部工具访问。

六、集成Redis缓存服务

Redis可用于会话存储或应用级缓存,提高响应速度并减轻数据库负载。

1、在docker-compose.yml中添加名为redis的服务,使用 redis:7-alpine 镜像。

2、无需额外配置即可运行,但建议启用持久化RDB快照功能。

3、在PHP代码中通过host为 redis、端口为6379连接实例。

4、可选地,在redis服务中挂载本地dump.rdb文件路径以实现数据保存。

七、定义共享网络与卷

确保各容器可通过自定义桥接网络相互通信,并使用命名卷管理持久化数据。

1、在docker-compose.yml的networks部分声明名为 app-network 的内部网络。

2、将所有服务加入该网络,设置driver为bridge模式。

3、在volumes部分定义 mysql_dataredis_data 命名卷。

4、在对应服务中引用这些卷,替代部分本地路径绑定以增强可移植性。

八、启动并验证多容器应用

完成所有配置后,使用Docker Compose命令启动整个栈并检查运行状态。

1、在终端进入项目根目录,执行 docker compose up -d 构建并后台运行所有服务。

2、使用 docker compose ps 查看各容器是否处于running状态。

3、访问 http://localhost 测试Nginx是否成功返回PHP页面。

4、进入PHP容器执行 php artisan tinker 或类似命令测试数据库和Redis连通性。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2748

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1676

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1536

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

995

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1464

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1235

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1549

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1307

2023.11.13

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

38

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号