深入解析 aschmelyun/docker-compose-laravel 项目的Docker部署架构
2025-07-10 08:17:07作者:董灵辛Dennis
项目概述
aschmelyun/docker-compose-laravel 是一个精心设计的Docker Compose配置方案,专门为Laravel应用开发环境提供了一站式容器化解决方案。这个配置通过Docker容器技术,将Laravel开发所需的各种服务完美整合,让开发者能够快速搭建完整的开发环境。
核心服务架构
该Docker Compose文件定义了一个完整的Laravel开发环境,包含以下核心服务组件:
- 应用服务(app):基于Nginx的Web服务器
- 数据库服务(mysql):MariaDB数据库
- PHP处理服务(php):PHP-FPM处理器
- 缓存服务(redis):Redis内存数据库
- 邮件测试服务(mailhog):邮件捕获和测试工具
- 开发工具服务:包括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文件或命令行覆盖默认值
- 确保容器内外文件权限一致,避免开发中的权限问题
最佳实践建议
-
开发流程:使用专用服务容器执行各种命令,如
docker-compose run --rm composer install
-
性能优化:利用
delegated
挂载策略平衡文件同步性能和一致性 -
环境配置:通过.env文件管理不同环境的变量配置
-
扩展性:可根据项目需求添加更多服务,如Elasticsearch或MongoDB
-
调试工具:考虑在PHP镜像中加入Xdebug等调试工具
总结
aschmelyun/docker-compose-laravel项目提供的Docker Compose配置是一个经过精心设计的Laravel开发环境解决方案。它通过容器化技术将开发环境标准化,解决了"在我机器上能运行"的经典问题,同时提供了完整的工具链支持,从代码编写到前端构建,从数据库管理到邮件测试,覆盖了Laravel开发的各个环节。这种配置特别适合团队协作开发和新成员快速上手项目。