phpStudy 升级 Docker 环境怎么做?完整操作教程
把 phpStudy 这个本地环境升级成使用 Docker 进行容器化部署, 核心路径是这样的: 第一步是安装 Docker Desktop , 第二步是用 docker-compose 来编排 PHP , 还有 MySQL , 以及 Web 服务这些内容, 第三步是把现在站点的数据和配置迁移过去, 最后还要进行验证操作。


全程大概只需花费 30 分钟就能搞定整个过程。
升级前准备

1. 对站点文件执行备份操作的时候, 要把 phpstudy_proWWW 目录下面所有的站点目录都找出来, 然后将它们进行打包和压缩。
2. 你要去导出数据库, 这个操作是在 phpMyAdmin 里面完成的, 你需要一个一个地把库给导出来, 生成 SQL 文件, 同时在操作的时候要把字符集确认为 utf8mb4。
3. 我们要把关键配置记录下来。这个记录需要涵盖各个站点的 php 版本信息。我们需要在 php.ini 文件里查看 upload_max_filesize 的设置情况。我们还需要查看 memory_limit 的设置情况。此外, 我们还得记录伪静态规则方面的内容。
4. 先停掉在 phpStudy 面板里正在跑着的那两个服务, 一个是 Apache 或者是 Nginx , 另一个是 MySQL。这样就能把这两个叫作 80 端口和 3306 端口的位置空出来, 让它们不再被占用。
安装 Docker
1. 到Docker官网去下载Docker Desktop for Windows, 这个软件需要你的电脑是Win10或者Win11专业版, 也或者是已经把WSL2给启用起来了。
2. 在安装的时候, 你要在相应的选项里面打勾, 也就是勾选那个名为Use WSL 2 instead of Hyper-V的文字。
3. 等在启动工作完成以后, 你需要去让终端来执行一下那个叫做 docker –version 的命令, 同时呢, 你还要让它再去执行一下 docker-compose –version 这样子的命令, 通过这两个步骤的操作, 你就能确认所有的状况都是正常的并且没有问题的。
编写 docker-compose.yml

需要在目标目录里面进行文件的新建操作, 比方说D:phpstack这个文件夹, 你要在这里面新建文件:
services:
web:
image: apache:2.4
ports: ["8080:80"]
volumes:
./www:/var/www/html
depends_on: [db]
db:
image: mysql:8.0
ports: ["3306:3306"]
environment:
MYSQL_ROOT_PASSWORD: 你设置的密码
volumes:
./db-data:/var/lib/mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
把 web 这个服务映射到端口 8080, 这样做的好处是能够避免和已经存在的那些残留下来的一些服务产生冲突。
数据库的数据会直接持久化到 ./db-data 这个文件夹当中, 也就是说在进行容器重构安装的操作之后, 数据也是不会丢失掉的。
当需要进行额外安装PHP扩展的时候, 可以自定义一个Dockerfile来继承官方的镜像, 然后在该Dockerfile里面执行安装操作。
迁移站点

1. 把www这个目录里面的各个站点的文件, 复制到D:phpstackwww这个路径下面对应的子目录里面去。
2. 在启动容器之后, 进行数据库的导入操作。
docker exec -i phpstack-db-1 mysql -uroot -p < D:phpstacksqldemo.sql
3. 把站点配置文件修改好, 就是把数据库主机从 localhost 这个设置更改成 db, 也就是容器服务名, 同时端口号保持为 3306。
4. 伪静态就是需要在站点目录里面放一个 .htaccess 文件, 如果服务器使用的是 Apache , 就这么做。或者也可以把规则换成 Nginx 的重写 rules , 用镜像的方式来处理, 这样也可以解决问题。
启动与验证
1. 终端执行 docker-compose up -d。
2. 请使用浏览器打开地址, 也就是输入 http://localhost:8080/站点名 , 来确认前台页面能够正常显示, 而且后台功能也保持正常的运行状态。
3. 进行文件上传的测试工作进行, 开展搜索功能的测试操作, 完成缓存等相关核心功能点的检测任务。
常见问题
端口冲突的问题, 大家可以用netstat -ano | findstr :8080这个命令来定位一下, 到底是谁在使用这个网络端口,然后可以选择把端口改个别的号码, 或者是直接把那个进程给结束掉。
数据库连接拒绝: 去把 componse 里面那个服务名的拼写再确认一下, 别搞错了;在容器和容器之间传递网络请求的时候, 用服务名就行, 千万不要去用 localhost。数据库连接拒绝。
PHP 扩展缺失:自定义 Dockerfile 中 RUN docker-php-ext-install gd intl zip,重建镜像。
数据丢失这个问题, 大家务必要通过 volumes 进行挂载操作, 千万不要直接去写容器内部的那个路径。
回退方案
请你把原来的那个 phpStudy 的安装目录先留着, 不要动它。万一你那个 Docker 的环境里边出了好多问题, 你就去执行 docker-compose down 这个命令, 用这个命令把容器给停下来, 再去重新把这个 phpStudy 的面板启用一下, 这样就能恢复回来了。
在这个过程中, 站点的文件并没有被删除掉, 所以这些文件还是可以直接拿来用的。
常见问题
《phpStudy 升级 Docker 环境怎么做?完整操作教程》主要讲什么?
把 phpStudy 这个本地环境升级成使用 Docker 进行容器化部署, 核心路径是这样的: 第一步是安装 Docker Desktop , 第二步是用 docker-compose 来编排 PH…
文章提到了哪些重点?
对站点文件执行备份操作的时候, 要把 phpstudy_proWWW 目录下面所有的站点目录都找出来, 然后将它们进行打包和压缩;
文章给出了哪些建议?
在容器和容器之间传递网络请求的时候, 用服务名就行, 千万不要去用 localhost。