目录
1. 前言
因工作中老旧项目基于PHP5.6环境,新项目基于PHP7.3 环境,在新项目开发过程还需要维护老旧项目,导致频繁切换PHP版本。前期曾使用MAMP,但在系统版本更新至 Monterey 12.4后MAMP无法正常使用,因此笔者尝试使用docker方式搭建项目所需环境,现将搭建过程及踩坑内容总结分享如下。
2. 目标
1. 实现老项目在 PHP5.6 版本下运行
2. 实现新项目在 PHP7.3 版本下运行
3. 两个 PHP 版本可共存,无需手动切换
4. 支持自定义扩展配置
5. 支持Composer安装/更新依赖
3. 实现原理图
- 基于docker 构建PHP5.6、7.3的运行环境,负责具体PHP脚本的执行;
- 利用Nginx,结合不同的配置转发至项目所需的PHP环境中,多个环境共用一个Nginx;
- 为保障容器间可以互相访问,Nginx、PHP容器在同一个网络下
4. 环境准备
1. Docker 环境,笔者环境为 Mac docker desktop 4.9.1 (81317) ,若无客户端,可以点击进入官网进行下载:客户端下载地址
2. Nginx 镜像,笔者使用的为官方最新的镜像。
docker pull nginx
3. PHP7.3 镜像,笔者镜像及版本为:php:7.3.33-fpm-alpine3.14,大家也可根据具体情况灵活调整。
docker pull php:7.3.33-fpm-alpine3.14
4. PHP5.6 镜像,笔者镜像及版本为:php:5.6.40-fpm,大家也可根据具体情况灵活调整。
docker pull php:5.6.40-fpm
5. 数据库笔者使用远程数据库,因此不在环境准备之列,如有需要大家可以拉取对应镜像即可。
5. 实战演练
(1)创建挂载目录
为了方便修改配置文件、查看日志,我们将Nginx、PHP的配置文件及日志文件挂载到宿主机,以下文件目录设置仅供参考,大家可根据自己的偏好灵活调整。
├── Docker
│ ├── nginx
│ │ ├── conf
│ │ │ ├── nginx.conf
│ │ │ └── vhost
│ │ └── logs
│ │ ├── access.log
│ │ ├── error.log
│ │ ├── test.access.log
│ │ └── test.access.log
│ └── php
│ ├── php5.6
│ │ ├── conf
│ │ └── log
│ └── php7.3
│ ├── conf
│ └── log
目录结构说明
1. Nginx 站点配置文件统一放置在vhost目录下,在nginx.conf中统一include。
2. php配置及日志文件根据版本进行设置不同的目录。
(2)默认配置文件
挂载卷时,若宿主机对应挂载目录下无配置文件挂载到容器后,容器内原有文件也会丢失,导致容器启动失败。因此在使用前我们可以创建一个临时容器,然后将容器内默认配置文件拷贝至宿主机作为挂载时的配置文件。
- 创建Nginx临时容器并拷贝相关配置