当前位置: 首页 > news >正文

学以致用——用Docker搭建ThinkPHP开发环境

在前几篇文档中,我们已经系统学习了 Docker 的核心概念(如容器、镜像、Docker 引擎等),并通过hello-world容器完成了第一次实战操作。当基础认知与入门实践相结合后,接下来我们可以尝试更贴近实际开发的场景 —— 利用 Docker 搭建 ThinkPHP 8.1 开发环境。

一、核心准备工作​

(一)验证 Docker 环境​

确保 Docker 已正确安装并运行,在 PowerShell 或命令提示符(CMD) 中执行以下命令验证:​

docker --version  # 查看Docker版本
docker-compose --version  # 查看Docker Compose版本

若如下图返回版本信息,说明环境就绪。​

二、搭建步骤详解​

(一)创建项目目录及 ThinkPHP 8.1 项目​

首先创建项目根目录并在其中生成 ThinkPHP 8.1 项目,步骤如下:​

1、创建项目根目录:​

在 Windows 中选择一个目录(如 E:\docker_dev\thinkphp-docker),作为项目根目录。​

2、创建 ThinkPHP 8.1 项目
方式一:通过 Docker Composer 镜像直接创建(无需进入容器):​
docker run --rm -v "${PWD}:/app" composer create-project topthink/think:8.1.* myweb​
​
# 若使用CMD,将${PWD}替换为%cd%​
# docker run --rm -v "%cd%:/app" composer create-project topthink/think:8.1.* myweb

命令解析:--rm表示容器运行后自动删除;-v "${PWD}:/app"(PowerShell)或-v "%cd%:/app"(CMD)将当前目录挂载到容器的/app目录;composer是官方镜像,直接创建项目到myweb目录。 

方式二:本地创建(需本地安装 Composer):​
composer create-project topthink/think:8.1.* myweb
方式三:容器内创建(无需本地安装 Composer):​
# 临时启动PHP容器并进入(PowerShell命令)
docker run --rm -it -v "${PWD}:/app" php:8.1-fpm /bin/bash# 若使用CMD,将${PWD}替换为%cd%
# docker run --rm -it -v "%cd%:/app" php:8.1-fpm /bin/bash# 在容器内安装Composer
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# 进入挂载目录并创建项目
cd /app && composer create-project topthink/think:8.1.* myweb# 退出容器
exit

此时项目目录结构已自动生成:​

thinkphp-docker/

└── myweb/ # 已创建的ThinkPHP 8.1项目代码目录

(二)编写 Docker Compose 配置​

在项目根目录(thinkphp-docker)创建docker-compose.yml,内容如下(Windows 环境无需修改路径格式,Docker 会自动适配):​

version: '3'
services:php:image: php:8.1-fpmvolumes:- ./myweb:/var/www/html  # 挂载本地项目到容器depends_on:- mysql  # 依赖mysql服务,确保先启动数据库nginx:image: nginx:latestports:- "80:80"  # 端口映射:宿主机80端口→容器80端口volumes:- ./myweb:/var/www/html  # 共享项目目录- ./nginx.conf:/etc/nginx/conf.d/thinkphp.conf  # 挂载Nginx配置depends_on:- php  # 依赖php服务mysql:image: mysql:8.0ports:- "3306:3306"  # 映射数据库端口environment:MYSQL_ROOT_PASSWORD: root  # 数据库root密码MYSQL_DATABASE: thinkphp  # 自动创建的数据库名MYSQL_CHARACTER_SET_SERVER: utf8mb4MYSQL_COLLATION_SERVER: utf8mb4_unicode_civolumes:- mysql_data:/var/lib/mysql  # 数据卷持久化存储数据volumes:mysql_data:  # 定义数据卷,防止容器删除丢失数据

关键配置解释:​

  • Windows 中./myweb等路径会被 Docker 自动转换为容器可识别的格式,无需手动修改为\​
  • mysql_data数据卷:在 Windows 上同样能确保数据持久化,不受容器删除影响​

(三)配置 Nginx 服务​

在项目根目录(thinkphp-docker)创建nginx.conf,内容如下:​

server {listen 80;server_name localhost;root /var/www/html/public;  # ThinkPHP 8.1入口目录(必须指向public)index index.php index.html;# URL重写支持(ThinkPHP的PATH_INFO模式)location / {if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=$1  last;}}# PHP脚本解析location ~ \.php$ {fastcgi_pass php:9000;  # 连接php容器的9000端口fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}

此时项目完整目录结构为:​

thinkphp-docker/​

├── docker-compose.yml # 容器编排配置​

├── nginx.conf # Nginx站点配置​

└── myweb/ # ThinkPHP 8.1项目代码目录​

(四)启动容器集群​

在项目根目录执行以下命令启动所有服务:​

docker-compose up -d # -d参数表示后台运行​

执行该命令时,Docker 会自动检查本地是否存在所需镜像,若不存在则自动从 Docker Hub 拉取,只需等待拉取完成即可。​

如果本地不存在所需的镜像就需要多等待一会,具体如下图:

 成功后的页面:

查看容器状态:​

docker-compose ps # 显示所有服务的运行状态​
  • 状态为Up表示启动成功​
  • 若出现Exit状态,可通过docker-compose logs [服务名]查看错误日志​

(五)安装 PHP 必要扩展​

ThinkPHP 8.1 运行依赖pdo_mysql、mbstring等扩展,需进入 PHP 容器安装(Windows 终端操作):​

# 查看PHP容器名称(PowerShell/CMD通用)
docker ps --format "{{.Names}}" | findstr "php"# 示例输出:thinkphp-docker_php_1# 进入php容器(替换[容器名]为实际名称)
docker exec -it [容器名] /bin/bash# 若提示bash: not found,改用sh
# docker exec -it [容器名] /bin/sh# 安装扩展
docker-php-ext-install pdo_mysql mbstring# 退出容器
exit# 重启php容器使扩展生效
docker restart [容器名]

(六)环境测试与配置调整​

1、在浏览器访问http://localhost,出现 ThinkPHP 8.1 欢迎页即表示环境搭建成功​(我是修改过端口号的,所以我的地址是http://localhost:8080)

2、修改数据库配置(myweb/config/database.php):​

return ['type'     => 'mysql','hostname' => 'mysql',  # 数据库主机名填容器名'database' => 'thinkphp','username' => 'root','password' => 'root','hostport' => '3306','charset'  => 'utf8mb4',  # 与MySQL字符集保持一致
];

​数据库主机名使用mysql(容器名),利用 Docker 内部网络通信​

数据库主机名docker-compose.yml 的 services 下给 MySQL 服务起的名字

三、Windows 环境注意事项​

1、路径与终端差异:​

  • PowerShell 中使用${PWD}表示当前目录,CMD 中使用%cd%​
  • 避免在路径中使用中文或空格,可能导致挂载失败​
  • 推荐使用 PowerShell(管理员模式)执行命令,兼容性更好​

2、端口冲突:​

ports:

- "8080:80" # 宿主机8080端口映射到容器80端口

若 80 或 3306 端口被占用(如 IIS、其他数据库),需修改docker-compose.yml中的端口映射,例如:​

3、权限问题:​

  • Windows 系统无需执行chmod命令,文件权限由系统自动管理​
  • 若出现权限错误,右键项目目录→“属性”→“安全”,确保当前用户有读写权限​

通过以上适配 Windows 系统的步骤,可快速搭建标准化的 ThinkPHP 8.1 开发环境,有效解决多环境一致性问题。熟练掌握后,可根据实际需求扩展更多服务。​

参考文章:

Docker 初学者需要了解的几个知识点 (五):建容器需要进一步了解的概念(1)-CSDN博客

Docker 初学者需要了解的几个知识点 (六):docker-compose.yml (ThinkPHP)-CSDN博客

Docker 初学者需要了解的几个知识点 (七):php.ini -CSDN博客

http://www.dtcms.com/a/308340.html

相关文章:

  • freesurfer处理图谱和被试的脑模版对齐的操作
  • realm数据库RealmObject的作用
  • 电子电气架构 --- 车载48V系统开辟全新道路
  • 神奇的数据跳变
  • 【实战教程】Nginx 全方位拦截 Web 常见攻击(含目录遍历、SQL 注入等)
  • Spire.XLS for .NET 中, 将 Excel 转换为 PDF 时, 如何设置纸张大小为A4纸,并将excel内容分页放置?
  • Go语言的gRPC教程-通信模式
  • 搭建 Mock 服务,实现前端自调
  • Python与MySQL的关联操作
  • AI+金融,如何跨越大模型和场景鸿沟?
  • 006 低功耗蓝牙BLE——音频数据无法直接免驱传输分析与折中方案
  • Spark SQL 的详细介绍
  • CentOS7上使用Docker安装Nacos详细步骤
  • java一个脚手架搭建
  • 常用设计模式系列(十六)—策略模式
  • sqli-labs靶场Less23
  • Jmeter全局变量跨线程组的使用
  • 四、主辅源电路
  • F12 开发者工具 使用指北
  • vk框架或者普通函数封装的一些函数可以拿取使用【会持续更新】
  • 谷歌devtools检查文本资源是否已压缩
  • 【LeetCode 热题 100】20. 有效的括号
  • 使用 Docker 部署 Apache RocketMQ
  • 数据转换能干什么?有哪些好用的数据转换方法?
  • 剖析客户服务痛点,借助 Baklib 整合多渠道反馈
  • ADW300 物联网仪表:引领能源计量智能化变革
  • STM32标准库搭建示例(STM32F103C8T6)
  • 操作系统:上下文切换(Context Switch)
  • Effective C++ 条款13:以对象管理资源
  • LLC电源原边MOS管DS增加RC吸收对ZVS的影响分析