10分钟内让Laravel项目跑起来需用Docker容器化部署:一、创建docker子目录集中管理配置,二、编写.dockerignore排除vendor等目录,三、修改.env中DB_HOST=mysql、REDIS_HOST=redis,四、用多阶段Dockerfile构建精简PHP镜像,五、通过docker-compose.yml编排app、nginx、mysql等7个服务并设依赖与网络,六、执行docker-compose up -d --build后运行migrate和key:generate,七、访问http://localhost:8000验证成功。

想在10分钟内让Laravel项目跑起来,又不想被PHP版本、MySQL配置、Nginx规则这些环境细节拖慢进度?Docker容器化部署能直接绕过本地环境差异,用统一镜像启动完整服务栈,连数据库迁移和Artisan命令都能一键完成。
准备基础文件与目录结构
在Laravel项目根目录下新建docker子目录,把所有容器相关配置集中管理,避免污染主项目结构。这一步不做,后续Dockerfile路径和卷挂载容易出错。
创建.dockerignore文件,填入node_modules/、vendor/、.git/、.env——【不加这一行,构建时会把本地vendor打包进镜像,导致PHP扩展冲突或Composer重复安装】。
复制.env.example为.env,把DB_HOST=mysql、REDIS_HOST=redis这两项写死,容器间通信必须用服务名而非localhost。
编写多阶段Dockerfile
方法一:精简生产镜像(推荐)
在项目根目录创建Dockerfile,内容如下:
FROM php:8.4-fpm AS builder
RUN apt-get update && apt-get install -y zip unzip libpng-dev libonig-dev libxml2-dev
RUN docker-php-ext-install pdo_mysql mbstring exif gd bcmath
WORKDIR /var/www
COPY . .
RUN composer install --no-dev --optimize-autoloader --ignore-platform-reqs
FROM php:8.4-fpm
COPY --from=builder /var/www /var/www
RUN chown -R www-data:www-data /var/www
USER www-data
EXPOSE 9000
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
CMD ["php-fpm"]
方法二:开发专用镜像(含调试工具)
若需Xdebug或Tinker交互,把最后一行改成CMD ["php-fpm", "-F"],并在docker-compose.yml中挂载xdebug.ini配置。
配置docker-compose.yml服务编排
第一步:定义核心服务
创建docker-compose.yml,写入以下7个服务:
app(PHP-FPM)、nginx(Web服务器)、mysql(8.0)、redis(7.2)、composer(一次性依赖安装)、artisan(命令行工具)、mailhog(邮件捕获)。
第二步:设置网络与依赖
所有服务统一加入名为laravel-net的自定义桥接网络;app服务必须depends_on mysql和redis,否则Laravel启动时会因数据库不可达而崩溃。
第三步:挂载关键卷
nginx服务挂载./public:/var/www/public和./docker/nginx.conf:/etc/nginx/conf.d/default.conf;app服务挂载./:/var/www,但【禁止挂载vendor目录,否则容器内扩展加载失败】。
第四步:暴露端口与环境变量
mysql映射3306:3306,nginx映射8000:80,mailhog映射8025:8025;在mysql服务块中写明MYSQL_ROOT_PASSWORD=secret和MYSQL_DATABASE=laravel。
初始化并启动整套环境
执行docker-compose up -d --build,等待所有容器状态变为Up。
运行docker-compose exec app php artisan migrate --seed,触发数据库初始化。
执行docker-compose exec app php artisan key:generate,生成APP_KEY并写入容器内.env。
打开浏览器访问http://localhost:8000,看到Laravel欢迎页即表示部署成功。

















