0

0

MacBook下laravel多版本docker开发环境配置方案

藏色散人

藏色散人

发布时间:2023-04-06 14:52:17

|

1643人浏览过

|

来源于learnku

转载

首先感谢社区,作者从本社区汲取了很多技术营养。现分享作者基于docker的PHP开发环境配置方案,希望能给小伙伴们在搭建PHP开发环境上带来思路上的参考。

项目集背景

laravel版本不同对PHP的版本要求不同。
如果遇到同时调试多个版本项目,且使用docker环境进行开发。具体场景如下(举例):
      认证系统基于laravel6,PHP运行版本7.2。
      应用系统基于laravel9,PHP运行版本8.1。
应用需要跳转认证系统进行统一登录。在认证通过后,携带临时ticket参数code回跳应用。应用拿到code参数后,请求认证系统RPC服务获取用户详细信息。

6873f38e79584798fed33b1ab645bae.png

目录结构参考:

./
├── docker-compose.yaml
├── mariadb-data
├── mariadb-log
├── nginx-config                         # nginx 配置
│   ├── conf.d
│   │   ├── default.conf
│   │   ├── sso.example.com.conf
│   │   ├── app.example.com.conf
│   ├── fastcgi.conf
│   ├── fastcgi_params
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── nginx-bak.conf
│   ├── nginx.conf
│   ├── scgi_params
│   ├── uwsgi_params
│   └── win-utf
├── nginx-html                           # laravel 项目代码目录
│   ├── sso.example.com
│   ├── app.example.com
├── nginx-log
│   ├── access.log
│   ├── error.log
│   ├── sso.example.com-error.log
│   ├── app.example.com-error.log
├── php-config-7.2
│   ├── conf.d
│   ├── php.ini
│   ├── php.ini-development
│   └── php.ini-production
├── php-config-8.1
│   ├── conf.d
│   ├── php.ini
│   ├── php.ini-development
│   └── php.ini-production
└── php-log

docker-compose.json 内容参考:

version: "3" 

services:
  mysql:
    hostname: mysql
    image: mariadb:10.5.10
    container_name: lara-mariadb-10.5
    ports:
      - "3308:3306" 
    volumes:
      - ./mariadb-log:/var/log/mysql
      - ./mariadb-data:/var/lib/mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_USER=username
      - MYSQL_PASSWORD=password
    networks:
      lara-net:
        ipv4_address: 172.23.0.2

  php72:
    hostname: php-fpm-72
    image: leleos/php-fpm:7.2
    container_name: lara-php-fpm-7.2
    ports:
      - "9001:9000" 
    links:
      - mysql:lara-mariadb-10.5
      - redis:lara-redis-6
    extra_hosts:
      - "sso.example.com:172.23.0.10" 
      - "app.example.com:172.23.0.10" 
    volumes:
      - ./nginx-html:/usr/share/nginx/html:rw
      - ./php-log:/var/log/phplog
      - ./php-config-7.2:/usr/local/etc/php
    environment:
      - TZ=Asia/Shanghai
    networks:
      lara-net:
        ipv4_address: 172.23.0.4

  php81:
    hostname: php-fpm-81
    image: bai615/amd64-php:8.1.17-fpm
    container_name: lara-php-fpm-8.1
    ports:
      - "9002:9000" 
    links:
      - mysql:lara-mariadb-10.5
      - redis:lara-redis-6
    extra_hosts:
      - "sso.example.com:172.23.0.10" 
      - "app.example.com:172.23.0.10" 
    volumes:
      - ./nginx-html:/usr/share/nginx/html:rw
      - ./php-log:/var/log/phplog
      - ./php-config-8.1:/usr/local/etc/php
    environment:
      - TZ=Asia/Shanghai
    networks:
      lara-net:
        ipv4_address: 172.23.0.5

  redis:
    hostname: redis
    container_name: lara-redis-6
    image: redis:6.2.6
    ports:
      - "6479:6379" 
    environment:
      - TZ=Asia/Shanghai
    networks:
      lara-net:
        ipv4_address: 172.23.0.8

  nginx:
    hostname: nginx
    container_name: lara-nginx-1.22.0
    image: nginx:1.22.0
    ports:
      - "81:81" 
      - "443:443" 
    links:
      - "php72:lara-php-fpm-7.2" 
      - "php81:lara-php-fpm-8.1" 
      - "mysql:lara-mariadb-10.5" 
      - "mongo:lara-mongo-5" 
      - "redis:lara-redis-6" 
    extra_hosts:
      - "sso.example.com:127.0.0.1" 
      - "app.example.com:127.0.0.1" 
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./nginx-config:/etc/nginx
      - ./nginx-log:/var/log/nginx
      - ./nginx-html:/usr/share/nginx/html
    networks:
      lara-net:
        ipv4_address: 172.23.0.10

  mongo:
    hostname: mongo
    container_name: lara-mongo-5
    image: mongo:5.0.12
    ports:
      - "27018:27017" 
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - mongo-data:/data/db
    networks:
      lara-net:
        ipv4_address: 172.23.0.9

volumes:
  mongo-data:

networks:
  lara-net:
    ipam:
      config:
        - subnet: "172.23.0.0/24"

nginx 虚拟机配置参考:

server {
    listen 80;
    server_name app.example.com;
    root "/usr/share/nginx/html/app.example.com/public";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/sso.example.com-error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass  php81:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }
}

宿主机 hosts 配置参考:

127.0.0.1 sso.example.com
127.0.0.1 app.example.com

php-fpm 的 docker image 获取参考:

作者在官方image的基础上补充了一些开发必须扩展,然后build的image
包含 PHP7.4、PHP8.0、PHP8.1、PHP8.2

MacBook Intel芯片 docker PHP images :
hub.docker.com/r/bai615/amd64-php/...

MacBook M1芯片 docker PHP images :
hub.docker.com/r/bai615/arm64-php/...

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载

好用的第三方老版本PHP
包含 PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7.0、PHP7.1、PHP7.2、PHP7.3
hub.docker.com/r/leleos/php-fpm/ta...

作者的开发体验:

docker 开发环境:

可以任意切换软件版本(PHP,MySQL,Nginx等),与测试环境或者生产环境保持一致。

homestead 开发环境:

需要基于vgrant,依赖vbox或者wmware,目前对M1支持还不够友好。

基于brew软件管理的开发环境:

brew 方式安装、管理软件(PHP,MySQL,Nginx等)。当brew版本升级时,可能会影响已安装软件出现不可预知问题。如下:
1、携带底层依赖同步升级,不再支持低版本PHP运行(如,PHP5.6 及以下版本不能运行)。
2、软件默认安装路径变更,依赖原路径的软件不能运行。
brew 3.x 软件默认安装路径 /opt/homebrew/bin/
brew 4.x 软件默认安装路径 /usr/local/bin/
3、PHP,MySQL,Nginx等版本切换不够灵活。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

340

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

772

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

141

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

80

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

489

2026.03.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

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

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