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

首先感谢社区,作者从本社区汲取了很多技术营养。现分享作者基于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.9volumes:  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.com127.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/…

好用的第三方老版本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等版本切换不够灵活。

以上就是MacBook下laravel多版本docker开发环境配置方案的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/63281.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
深入理解 Java Scanner 的 reset() 方法
上一篇 2025年11月11日 11:34:51
mysql如何设置主键
下一篇 2025年11月11日 11:38:56

相关推荐

  • laravel 依赖注入是什么

    laravel 依赖注入是什么laravel 依赖注入是什么laravel 依赖注入是什么laravel 依赖注入是什么

    laravel依赖注入一词是由Martin Fowler提出的术语,它是将组件注入到应用程序中的一种行为,依赖注入是敏捷架构中关键元素,使用示例如“class UserProvider{protected $connection…}”。                          …

    2026年10月1日 • 用户投稿
    000
  • 就业培训中PHP+MySQL框架的学习情况

    php和mysql在就业培训中学习情况积极,学员通过系统学习和实践可快速掌握并找到工作机会。1. 理解php基本语法和mysql查询语言是基础。2. 学习laravel或symfony等框架提高开发效率。3. 参与实际项目增强技术能力和简历亮点。4. 注重安全性,防范sql注入和xss攻击。5. 优…

    2026年10月1日
    000
  • Mac下怎么安装和搭建Homestead 2.0环境

    Mac下怎么安装和搭建Homestead 2.0环境Mac下怎么安装和搭建Homestead 2.0环境Mac下怎么安装和搭建Homestead 2.0环境Mac下怎么安装和搭建Homestead 2.0环境

    mac下怎么搭建homestead环境?下面本篇文章给大家介绍一下mac版本下安装和搭建 homestead 2.0环境的方法,希望对大家有所帮助! Homestead 是 Laravel 官方推荐的开发环境之一,它由定制 Vagrantfile 的 Homestead 脚本和包含 PHP 开发相关…

    2026年10月1日 • 用户投稿
    100
  • Homestead安装运行laravel项目的步骤详解【图文】

    Homestead安装运行laravel项目的步骤详解【图文】Homestead安装运行laravel项目的步骤详解【图文】Homestead安装运行laravel项目的步骤详解【图文】Homestead安装运行laravel项目的步骤详解【图文】

    虽然homestead预装好了 nginx、php、mysql、postgresql、redis、memcached、node 以及开发令人惊叹的 laravel 应用程序所需的所有其他软件,但laravel仍然是需要我们去安装的,那么在阅读本文前你需要搭建好homestead环境,建议结合此文《最…

    2026年10月1日 • 用户投稿
    100
  • laravel中has方法怎么用

    laravel中has方法怎么用laravel中has方法怎么用laravel中has方法怎么用laravel中has方法怎么用

    laravel中has方法可以用来查询数据间是否有关联关系,常用于判断当前请求中是否含有指定的值,如果请求中存在该值则has()方法将会返回true,当给定一个数组时,该方法将会判断指定的值是否全部存在,语法为“has(‘name’)”。 本教程操作环境:windows10系…

    2026年10月1日 • 用户投稿
    000
  • Homestead 怎么配置 xdebug 进行调试(PhpStorm)

    Homestead 怎么配置 xdebug 进行调试(PhpStorm)Homestead 怎么配置 xdebug 进行调试(PhpStorm)Homestead 怎么配置 xdebug 进行调试(PhpStorm)Homestead 怎么配置 xdebug 进行调试(PhpStorm)

    homestead环境下怎么配置phpstorm xdebug进行调试,下面本篇文章给大家介绍一下phpstorm + homestead 配置 xdebug的方法,希望对大家有所帮助! 环境 windows10PhpStorm v2019.1.3homestead v7.2 (ubuntu18.0…

    2026年10月1日 • 用户投稿
    000
  • laravel与lumen的区别是什么

    laravel与lumen的区别是什么laravel与lumen的区别是什么laravel与lumen的区别是什么laravel与lumen的区别是什么

    区别:1、Laravel是一个全栈Web应用程序框架,而Lumen是一个微框架,用于开发微服务和API开发;2、Laravel可以与更多数量的工具集成,而Lumen与其他工具的集成设施数量较少。 本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。 laravel与lume…

    2026年10月1日 • 用户投稿
    100
  • laravel中dd属于函数吗

    laravel中dd属于函数吗laravel中dd属于函数吗laravel中dd属于函数吗laravel中dd属于函数吗

    在laravel中,dd()属于laravel辅助函数;dd函数用于输出给定的值并结束脚本运行,可以打印laravel中的所有变量,语法为“dd($value1,$value2…)”。 本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。 laravel中dd属…

    2026年10月1日 • 用户投稿
    000
  • laravel orWhere怎么用?(附代码示例)

    下面由laravel教程栏目给大家讲解laravel orwhere怎么用,希望对大家有所帮助! laravel框架下 where 条件查询很简单,这里就不写了,这里主要记录一下平常不怎么用的 orWhere 多条件 or 查询语句的拼接,示例如下: (1)SQL 语句: select `id` f…

    2026年10月1日
    000
  • 汇总laravel migrate的一些常见错误

    汇总laravel migrate的一些常见错误汇总laravel migrate的一些常见错误汇总laravel migrate的一些常见错误汇总laravel migrate的一些常见错误

    下面由laravel教程栏目给大家介绍关于laravel migrate初学的一些常见错误及其解决办法,希望对大家有所帮助! 前言 最近断断续续开始 laravel 入门学习,想整个简单的通讯录系统,设立了两个表,一个 branches ,一个 contacts。在创建 migration 文件的时…

    2026年10月1日 • 用户投稿
    100
  • 推荐两款在laravel中用的markdown格式css样式

    推荐两款在laravel中用的markdown格式css样式推荐两款在laravel中用的markdown格式css样式推荐两款在laravel中用的markdown格式css样式推荐两款在laravel中用的markdown格式css样式

    下面由laravel教程栏目给大家推荐两款非常漂亮的markdown格式css样式,希望对大家有所帮助! 发送markdown格式邮件时推荐的两款非常漂亮的markdown格式css样式:                                                        …

    2026年10月1日 • 用户投稿
    000
  • Laravel能用钉钉接收系统警报!

    Laravel能用钉钉接收系统警报!Laravel能用钉钉接收系统警报!Laravel能用钉钉接收系统警报!Laravel能用钉钉接收系统警报!

    下面由laravel教程栏目给大家介绍laravel框架怎么使用钉钉聊天机器人接收系统警报 ,希望对大家有所帮助!                                                                                 钉钉提供的聊天机器人功能…

    2026年10月1日 • 用户投稿
    000
  • laravel中mix的用法是什么

    laravel中mix的用法是什么laravel中mix的用法是什么laravel中mix的用法是什么laravel中mix的用法是什么

    在laravel中,“laravel mix”是一款前端任务自动化管理工具,mix提供了简洁流畅的API,能够为Laravel应用定义Webpack编译任务,mix支持许多CSS与JavaScript预处理器,通过调用可以管理前端资源。 本文操作环境:Windows10系统、Laravel6版、De…

    2026年10月1日 • 用户投稿
    100
  • 一文详解laravel如何安装inertia vue3的版本

    一文详解laravel如何安装inertia vue3的版本一文详解laravel如何安装inertia vue3的版本一文详解laravel如何安装inertia vue3的版本一文详解laravel如何安装inertia vue3的版本

    下面由laravel教程栏目给大家介绍laravel如何安装inertia vue3的版本,希望对大家有所帮助!                                                                                 一、安装前要求 1.1 已…

    2026年10月1日 • 用户投稿
    000
  • laravel怎么对数据库查询进行性能分析_laravel数据库查询性能分析方法

    首先启用查询日志并记录执行时间,使用DB::enableQueryLog()捕获SQL语句及耗时,筛选time>100ms的慢查询;接着通过Laravel Debugbar可视化分析数据库调用次数与重复查询;再利用Telescope监控所有数据库活动,查看执行时间与调用位置;同时在AppSer…

    2026年10月1日
    300
  • laravel 队列是什么

    laravel 队列是什么laravel 队列是什么laravel 队列是什么laravel 队列是什么

    在laravel中,队列是一种操作受限制的线性表,它只允许在表的前端(队头)进行删除操作,而在表的后端(队尾)进行插入操作;通过队列,开发者可以将耗时任务的处理往后推延,进而可以极大地提升web请求响应速度。 本教程操作环境:windows7系统、Laravel6版、Dell G3电脑。 larav…

    2026年10月1日 • 用户投稿
    200
  • laravel支持什么数据库

    laravel支持什么数据库laravel支持什么数据库laravel支持什么数据库laravel支持什么数据库

    laravel支持四种数据库:1、MySQL,一个关系型数据库管理系统;2、PostgreSQL,一款“对象-关系”型数据库管理系统;3、SQLite,一款轻型的关系型数据库管理系统;4、SQL Server,一款关系型数据库管理系统。 本教程操作环境:windows7系统、Laravel6版、De…

    2026年10月1日 • 用户投稿
    100
  • laravel服务容器是什么

    laravel服务容器是什么laravel服务容器是什么laravel服务容器是什么laravel服务容器是什么

    在laravel中,服务容器是一个用于管理类依赖以及实现依赖注入的强有力工具。当应用程序需要使用某一个服务时,服务容器会将服务解析出来,并同时自动解决服务之间的依赖,然后交给应用程序使用。 本教程操作环境:windows7系统、Laravel6版、Dell G3电脑。 什么是服务容器 Laravel…

    2026年10月1日 • 用户投稿
    000
  • 归纳整理Laravel基础知识总结

    归纳整理Laravel基础知识总结归纳整理Laravel基础知识总结归纳整理Laravel基础知识总结归纳整理Laravel基础知识总结

    本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了一些基础知识,包括了怎么安装laravel、路由、验证器、视图等等相关内容,下面一起来看一下,希望对大家有帮助。 【相关推荐:laravel视频教程】 一、安装laravle 1、安装composer 2、执行命令: composer …

    2026年9月30日 • 用户投稿
    100
  • 以laravel-admin为例详解Laravel单用户登录

    以laravel-admin为例详解Laravel单用户登录以laravel-admin为例详解Laravel单用户登录以laravel-admin为例详解Laravel单用户登录以laravel-admin为例详解Laravel单用户登录

    本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单用户登录的相关问题,下面一起来看一下以laravel-admin为例单用户登录的相关内容,希望对大家有帮助。 【相关推荐:laravel视频教程】 单用户登录这个术语大家都听说过, 为什么要单用户登录? 比如: 视频网站, 如果一…

    2026年9月30日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信