本教程详细介绍了如何利用 Docker 和 Docker Compose 容器化 Laravel 应用程序与 PostgreSQL 数据库。我们将提供优化的 Dockerfile 和 docker-compose.yml 配置,涵盖 PHP-FPM、Composer、Node.js 依赖安装以及 PostgreSQL 数据库的设置,确保开发环境的快速搭建和一致性。文章还包括运行指令、数据库连接配置及重要的生产环境考量,旨在帮助开发者高效地管理 Laravel 项目的容器化部署。
要使用 Docker 容器化 Laravel 应用和 PostgreSQL 数据库,我们需要两个核心文件:Dockerfile 用于构建 Laravel 应用的镜像,以及 docker-compose.yml 用于定义和协调 Laravel 应用服务与 PostgreSQL 数据库服务。
在项目的根目录下,创建以下文件:
Dockerfile 定义了如何构建 Laravel 应用的 Docker 镜像。它将包含安装 PHP 扩展、Composer、Node.js 等所有必要步骤。
以下是一个为 Laravel 应用优化的 Dockerfile 示例:
# 使用官方 PHP-FPM 镜像作为基础,版本为 7.4
FROM php:7.4-fpm
# 设置工作目录
WORKDIR /app
# 安装系统依赖:Git, Curl, PNG库, Onig库, XML库, Zip库, PostgreSQL客户端, Node.js 等
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip \
vim \
postgresql-client \
libpq-dev \
nodejs \
npm \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
# 安装 PHP 扩展:PostgreSQL PDO, 多字节字符串, EXIF, 进程控制, 任意精度数学, GD图形库, Zip
RUN docker-php-ext-install -j$(nproc) pdo_pgsql mbstring exif pcntl bcmath gd zip
# 安装 Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 将应用程序文件复制到容器中
COPY . /app
# 安装 Laravel 依赖
# 首先清理旧的 vendor 目录和 composer.lock 文件,确保全新安装
RUN rm -rf vendor composer.lock \
&& composer install --no-dev --optimize-autoloader
# 设置 Laravel 目录权限
RUN chmod -R 775 storage bootstrap/cache \
&& chown -R www-data:www-data /app
# 安
装 Node.js 依赖 (如果您的 Laravel 项目使用了 Laravel Mix 或前端构建工具)
RUN npm install
# 暴露 PHP-FPM 端口
EXPOSE 9000
# 启动 PHP-FPM 服务
CMD ["php-fpm"]Dockerfile 解释:
docker-compose.yml 文件用于定义和运行多容器 Docker 应用程序。我们将在此文件中定义 Laravel 应用服务和 PostgreSQL 数据库服务,并配置它们之间的网络和数据持久化。
以下是一个完整的 docker-compose.yml 示例:
version: '3.8' # 指定 Docker Compose 文件格式版本
services:
# Laravel 应用服务
laravel_app:
container_name: my-laravel-app # 容器名称
build:
context: . # 构建上下文为当前目录
dockerfile: Dockerfile # 使用当前目录下的 Dockerfile
# 在开发环境中,我们可以直接运行 Laravel 内置的开发服务器
# 注意:生产环境建议使用 Nginx + PHP-FPM
command: 'php artisan serve --host=0.0.0.0 --port=8000'
restart: unless-stopped # 容器异常退出时自动重启
volumes:
- .:/app # 将宿主机当前目录挂载到容器的 /app 目录,方便代码修改后无需重建镜像
ports:
- "8000:8000" # 将宿主机的 8000 端口映射到容器的 8000 端口
environment:
# Laravel 应用程序的环境变量
DB_CONNECTION: pgsql
DB_HOST: postgres_db # 数据库服务名称,Docker Compose 会自动解析为 IP
DB_PORT: 5432
DB_DATABASE: my_laravel_db
DB_USERNAME: laravel_user
DB_PASSWORD: secret_password
APP_ENV: local
APP_DEBUG: "true"
APP_KEY: base64:your_base64_app_key_here # 请替换为实际生成的 APP_KEY
networks:
- app_network # 连接到自定义网络
depends_on:
- postgres_db # 确保 postgres_db 服务在 laravel_app 之前启动
# PostgreSQL 数据库服务
postgres_db:
container_name: my-postgres-db # 容器名称
image: postgres:13 # 使用 PostgreSQL 13 官方镜像
restart: unless-stopped # 容器异常退出时自动重启
ports:
- "5432:5432" # 将宿主机的 5432 端口映射到容器的 5432 端口
volumes:
- postgres_data:/var/lib/postgresql/data # 数据卷用于持久化 PostgreSQL 数据
environment:
# PostgreSQL 数据库的环境变量
POSTGRES_DB: my_laravel_db
POSTGRES_USER: laravel_user
POSTGRES_PASSWORD: secret_password
# POSTGRES_HOST_AUTH_METHOD: "trust" # 仅用于开发环境,生产环境不推荐,因为它允许所有连接无需密码
networks:
- app_network # 连接到自定义网络
# 定义自定义网络,用于服务间通信
networks:
app_network:
driver: bridge # 使用桥接网络模式
# 定义数据卷,用于持久化 PostgreSQL 数据
volumes:
postgres_data:
driver: local # 使用本地数据卷docker-compose.yml 解释:
在 Laravel 项目的 .env 文件中,您需要配置数据库连接信息,以匹配 docker-compose.yml 中 PostgreSQL 服务的设置:
DB_CONNECTION=pgsql DB_HOST=postgres_db # 使用 Docker Compose 服务名称 DB_PORT=5432 DB_DATABASE=my_laravel_db DB_USERNAME=laravel_user DB_PASSWORD=secret_password
确保 APP_KEY 已经生成。如果没有,在容器启动后,可以通过 docker-compose exec laravel_app php artisan key:generate 命令生成。
完成 Dockerfile 和 docker-compose.yml 文件的配置后,您可以使用以下命令来构建、启动和管理您的容器化应用:
构建和启动服务: 在项目的根目录下,打开终端并运行:
sudo docker-compose build # 构建 Laravel 应用镜像 sudo docker-compose up -d # 在后台启动所有服务
检查服务状态:
sudo docker-compose ps
此命令将显示所有服务的运行状态。
查看日志:
sudo docker-compose logs -
# php
# nodejs
# word
# laravel
# js
# 前端
# node.js
# bootstrap
# git
# node
# composer
# nginx
# npm
# cURL
# var
# copy
相关文章:
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
宿州网站制作公司兴策,安徽省低保查询网站?
智能起名网站制作软件有哪些,制作logo的软件?
家具网站制作软件,家具厂怎么跑业务?
c# 在高并发场景下,委托和接口调用的性能对比
北京建设网站制作公司,北京古代建筑博物馆预约官网?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
c# 在ASP.NET Core中管理和取消后台任务
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何选择适合PHP云建站的开源框架?
如何选择最佳自助建站系统?快速指南解析优劣
如何获取开源自助建站系统免费下载链接?
如何选择靠谱的建站公司加盟品牌?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
公司网站制作需要多少钱,找人做公司网站需要多少钱?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
高防服务器租用首荐平台,企业级优惠套餐快速部署
linux top下的 minerd 木马清除方法
建站上市公司网站建设方案与SEO优化服务定制指南
公司网站制作价格怎么算,公司办个官网需要多少钱?
北京网站制作的公司有哪些,北京白云观官方网站?
如何通过多用户协作模板快速搭建高效企业网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
建站之星客服服务时间及联系方式如何?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
香港网站服务器数量如何影响SEO优化效果?
如何高效完成自助建站业务培训?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
,柠檬视频怎样兑换vip?
5种Android数据存储方式汇总
,sp开头的版面叫什么?
网站制作免费,什么网站能看正片电影?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
网站制作服务平台,有什么网站可以发布本地服务信息?
如何设计高效校园网站?
详解jQuery停止动画——stop()方法的使用
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何彻底卸载建站之星软件?
上海网站制作开发公司,上海买房比较好的网站有哪些?
如何用搬瓦工VPS快速搭建个人网站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
微信h5制作网站有哪些,免费微信H5页面制作工具?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
大型企业网站制作流程,做网站需要注册公司吗?
建站之星下载版如何获取与安装?
建站VPS推荐:2025年高性能服务器配置指南
广州美橙建站如何快速搭建多端合一网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。