首页
/ 深入解析 aschmelyun/docker-compose-laravel 项目的Docker部署架构

深入解析 aschmelyun/docker-compose-laravel 项目的Docker部署架构

2025-07-10 08:17:07作者:董灵辛Dennis

项目概述

aschmelyun/docker-compose-laravel 是一个精心设计的Docker Compose配置方案,专门为Laravel应用开发环境提供了一站式容器化解决方案。这个配置通过Docker容器技术,将Laravel开发所需的各种服务完美整合,让开发者能够快速搭建完整的开发环境。

核心服务架构

该Docker Compose文件定义了一个完整的Laravel开发环境,包含以下核心服务组件:

  1. 应用服务(app):基于Nginx的Web服务器
  2. 数据库服务(mysql):MariaDB数据库
  3. PHP处理服务(php):PHP-FPM处理器
  4. 缓存服务(redis):Redis内存数据库
  5. 邮件测试服务(mailhog):邮件捕获和测试工具
  6. 开发工具服务:包括Composer、NPM和Artisan命令行工具

详细服务解析

1. 应用服务 (app)

app:
  build:
    context: ./dockerfiles
    dockerfile: nginx.dockerfile
    args:
      - UID=${UID:-1000}
      - GID=${GID:-1000}
  ports:
    - "80:80"
  volumes:
    - ./src:/var/www/html:delegated
  • 使用自定义的Nginx镜像构建,确保与开发环境完美适配
  • 通过环境变量传递用户ID和组ID,解决容器内外文件权限问题
  • 采用delegated挂载策略优化性能,适合开发环境频繁文件变更的场景
  • 映射主机80端口,直接通过本地访问应用

2. 数据库服务 (mysql)

mysql:
  image: mariadb:10.6
  environment:
    MYSQL_DATABASE: homestead
    MYSQL_USER: homestead
    MYSQL_PASSWORD: secret
    MYSQL_ROOT_PASSWORD: secret
  • 使用MariaDB 10.6镜像,与Laravel默认配置兼容
  • 预配置了数据库名称、用户和密码,与Laravel Homestead环境保持一致
  • 自动重启策略确保服务稳定性
  • 暴露3306端口便于外部数据库工具连接

3. PHP处理服务 (php)

php:
  build:
    context: ./dockerfiles
    dockerfile: php.dockerfile
  ports:
    - "9000:9000"
  • 使用自定义PHP镜像,确保包含Laravel所需的所有扩展
  • 暴露9000端口与Nginx进行FastCGI通信
  • 同样采用用户ID/组ID传递解决权限问题
  • 与app服务共享代码卷,实现实时修改生效

4. 开发工具服务

Composer服务

composer:
  build:
    context: ./dockerfiles
    dockerfile: php.dockerfile
  entrypoint: [ 'composer', '--ignore-platform-reqs' ]
  • 复用PHP镜像,确保环境一致性
  • 设置Composer为入口点,方便执行各种Composer命令
  • --ignore-platform-reqs参数避免不必要的平台要求检查

NPM服务

npm:
  image: node:current-alpine
  entrypoint: [ 'npm' ]
  • 使用最新的Node.js Alpine镜像,轻量高效
  • 预配置了常用前端开发端口(3000, 3001, 5173)
  • 直接映射npm命令,支持各种前端构建操作

Artisan服务

artisan:
  build:
    context: ./dockerfiles
    dockerfile: php.dockerfile
  entrypoint: [ 'php', '/var/www/html/artisan' ]
  • 为Laravel命令行工具提供专用容器
  • 可执行迁移、队列等各种Artisan命令
  • 依赖MySQL服务确保数据库操作的正确顺序

网络配置

networks:
  laravel:
  • 创建名为laravel的自定义网络
  • 所有服务加入同一网络,实现服务间通信
  • 容器间可通过服务名直接访问(如php服务访问mysql服务)

环境变量配置

args:
  - UID=${UID:-1000}
  - GID=${UID:-1000}
  • 灵活的用户ID/组ID传递机制
  • 支持通过.env文件或命令行覆盖默认值
  • 确保容器内外文件权限一致,避免开发中的权限问题

最佳实践建议

  1. 开发流程:使用专用服务容器执行各种命令,如docker-compose run --rm composer install

  2. 性能优化:利用delegated挂载策略平衡文件同步性能和一致性

  3. 环境配置:通过.env文件管理不同环境的变量配置

  4. 扩展性:可根据项目需求添加更多服务,如Elasticsearch或MongoDB

  5. 调试工具:考虑在PHP镜像中加入Xdebug等调试工具

总结

aschmelyun/docker-compose-laravel项目提供的Docker Compose配置是一个经过精心设计的Laravel开发环境解决方案。它通过容器化技术将开发环境标准化,解决了"在我机器上能运行"的经典问题,同时提供了完整的工具链支持,从代码编写到前端构建,从数据库管理到邮件测试,覆盖了Laravel开发的各个环节。这种配置特别适合团队协作开发和新成员快速上手项目。