为保障Laravel项目跨环境一致性,需通过Docker标准化部署:一、编写Dockerfile定制PHP-Apache镜像;二、用docker-compose编排Web、MySQL、Redis服务;三、修改.env中DB_HOST为db、REDIS_HOST为redis;四、构建镜像并运行初始化命令;五、验证服务状态、日志及应用访问。

如果您希望在不同环境中保持Laravel项目运行的一致性,避免“在我机器上能跑”的问题,则需要借助Docker实现标准化的环境封装。以下是实现Laravel项目Docker化部署的具体步骤:
一、构建基础Docker镜像
通过自定义Dockerfile定义PHP运行环境,确保PHP版本、扩展、配置与生产环境完全一致,消除因系统差异导致的兼容性问题。
1、在项目根目录创建名为Dockerfile的文件。
2、写入基础镜像声明:FROM php:8.2-apache。
3、安装必要PHP扩展:RUN docker-php-ext-install pdo_mysql mbstring exif pcntl。
4、启用Apache重写模块:RUN a2enmod rewrite。
5、复制Apache虚拟主机配置到容器内指定路径。
二、使用docker-compose编排服务
将Laravel应用、MySQL数据库、Redis缓存等依赖服务统一声明并联动启动,使整个栈可一键复现,保障开发、测试、预发、生产环境结构一致。
1、在项目根目录创建docker-compose.yml文件。
2、定义web服务块,指定build上下文为当前目录,并挂载源码:volumes: ["./:/var/www/html"]。
3、为db服务指定mysql:8.0镜像,并设置环境变量MYSQL_ROOT_PASSWORD。
4、为redis服务添加image: redis:7-alpine,并暴露6379端口。
5、在web服务中配置depends_on,确保db和redis先于web启动。
三、配置.env文件适配容器网络
容器内服务间通信依赖Docker内部DNS解析,需将Laravel的数据库连接地址由localhost改为对应服务名,否则应用无法连接数据库。
1、打开项目中的.env文件。
2、修改DB_HOST值为:db(与docker-compose中db服务名称一致)。
3、修改REDIS_HOST值为:redis(与docker-compose中redis服务名称一致)。
4、确认DB_PORT保持默认3306,REDIS_PORT保持默认6379。
5、保存文件后,在容器内执行php artisan config:clear确保配置重载。
四、初始化应用并运行容器
在容器首次启动前完成Laravel所需的基础初始化操作,包括权限设置、密钥生成和存储链接,防止运行时报错中断。
1、执行命令:docker-compose build 构建所有服务镜像。
2、执行命令:docker-compose run --rm web composer install 安装PHP依赖。
3、执行命令:docker-compose run --rm web php artisan key:generate 生成APP_KEY。
4、执行命令:docker-compose run --rm web php artisan storage:link 创建storage软链接。
5、执行命令:docker-compose up -d 后台启动全部服务。
五、验证容器内应用可访问性
确认Web服务已正确监听并响应请求,同时检查日志输出以定位潜在配置错误或启动失败原因。
1、执行命令:docker-compose ps 查看各服务状态是否为Up。
2、执行命令:docker-compose logs -f web 实时跟踪Apache及PHP错误日志。
3、在宿主机浏览器中访问http://localhost,确认Laravel欢迎页正常显示。
4、执行命令:docker-compose exec web php artisan tinker 进入交互式控制台验证PHP运行环境。
5、执行命令:docker-compose exec db mysql -uroot -p -e "SHOW DATABASES;" 验证数据库连接可用性。











