使用 Docker 容器化 Laravel 和 PostgreSQL 应用

使用 docker 容器化 laravel 和 postgresql 应用

本教程详细介绍了如何利用 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 数据库服务。

在项目的根目录下,创建以下文件:

Dockerfiledocker-compose.yml

第二部分:构建 Laravel 应用的 Dockerfile

Dockerfile 定义了如何构建 Laravel 应用的 Docker 镜像。它将包含安装 PHP 扩展、Composer、Node.js 等所有必要步骤。

以下是一个为 Laravel 应用优化的 Dockerfile 示例:

# 使用官方 PHP-FPM 镜像作为基础,版本为 7.4FROM 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图形库, ZipRUN docker-php-ext-install -j$(nproc) pdo_pgsql mbstring exif pcntl bcmath gd zip# 安装 ComposerRUN 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 解释:

FROM php:7.4-fpm: 选择 php:7.4-fpm 作为基础镜像,这更适合生产环境,因为 php-fpm 专为 Web 服务器(如 Nginx)处理 PHP 请求而设计。WORKDIR /app: 将容器内的工作目录设置为 /app。RUN apt-get update && apt-get install -y …: 安装 Laravel 运行和开发所需的系统级依赖,包括 Git、Curl、各种库(如 libpng-dev、libpq-dev 用于 PostgreSQL 连接),以及 Node.js 和 npm。–no-install-recommends 和 rm -rf /var/lib/apt/lists/* 有助于减小镜像大小。RUN docker-php-ext-install …: 安装 Laravel 和 PostgreSQL 连接所需的 PHP 扩展,例如 pdo_pgsql、mbstring、gd、zip 等。-j$(nproc) 利用多核加速编译。RUN curl -sS https://getcomposer.org/installer | php — –install-dir=/usr/local/bin –filename=composer: 安装 Composer,PHP 的依赖管理工具。COPY . /app: 将宿主机当前目录(即 Laravel 项目根目录)下的所有文件复制到容器的 /app 目录。RUN rm -rf vendor composer.lock && composer install –no-dev –optimize-autoloader: 清理并安装 Composer 依赖。–no-dev 用于生产环境排除开发依赖,–optimize-autoloader 优化自动加载。RUN chmod -R 775 storage bootstrap/cache && chown -R www-data:www-data /app: 设置 Laravel 关键目录的权限,确保 Web 服务器(www-data 用户)有写入权限。RUN npm install: 如果您的 Laravel 项目使用 Laravel Mix 或其他前端构建工具,需要安装 Node.js 依赖。EXPOSE 9000: 声明容器将监听 9000 端口(PHP-FPM 的默认端口)。CMD [“php-fpm”]: 定义容器启动时执行的命令,即启动 PHP-FPM 服务。

第三部分:配置 Docker Compose 协调服务

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 解释:

version: ‘3.8’: 指定 Docker Compose 文件格式的版本。services: 定义了多个服务。laravel_app:build: 指示 Docker Compose 从当前目录的 Dockerfile 构建镜像。command: 在开发环境中,我们直接运行 Laravel 的内置服务器。请注意,在生产环境中,通常会使用 Nginx 作为 Web 服务器,并通过 PHP-FPM(Dockerfile 中已配置)处理 PHP 请求。volumes: 将宿主机的当前目录挂载到容器的 /app 目录。这意味着您在宿主机上修改代码后,容器内的代码也会同步更新,无需重建镜像。ports: 将宿主机的 8000 端口映射到容器的 8000 端口,以便您可以通过 http://localhost:8000 访问 Laravel 应用。environment: 设置 Laravel 应用程序的环境变量,包括数据库连接信息。DB_HOST 使用 postgres_db,这是 PostgreSQL 服务的名称,Docker Compose 会自动将其解析为容器内部 IP。APP_KEY 需要替换为您自己的应用密钥。networks: 将 laravel_app 服务连接到名为 app_network 的自定义网络。depends_on: 确保 postgres_db 服务在 laravel_app 之前启动。postgres_db:image: 使用 postgres:13 官方镜像。建议指定版本以确保稳定性。ports: 将宿主机的 5432 端口映射到容器的 5432 端口,方便通过外部工具连接数据库(可选)。volumes: 使用一个名为 postgres_data 的数据卷来持久化 PostgreSQL 的数据。这意味着即使容器被删除,数据也不会丢失。environment: 设置 PostgreSQL 数据库的环境变量,包括数据库名称、用户名和密码。这些值应与 Laravel 应用的 .env 文件中的配置相匹配。networks: 定义了一个名为 app_network 的桥接网络,允许 laravel_app 和 postgres_db 服务在内部相互通信。volumes: 定义了名为 postgres_data 的数据卷,用于 PostgreSQL 数据的持久化存储。

第四部分:Laravel 数据库连接配置

在 Laravel 项目的 .env 文件中,您需要配置数据库连接信息,以匹配 docker-compose.yml 中 PostgreSQL 服务的设置:

DB_CONNECTION=pgsqlDB_HOST=postgres_db # 使用 Docker Compose 服务名称DB_PORT=5432DB_DATABASE=my_laravel_dbDB_USERNAME=laravel_userDB_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 # 在后台启动所有服务

docker-compose build 会根据 Dockerfile 构建 laravel_app 服务的镜像。docker-compose up -d 会启动 laravel_app 和 postgres_db 服务,-d 参数表示在后台运行。

检查服务状态:

sudo docker-compose ps

此命令将显示所有服务的运行状态。

查看日志:

sudo docker-compose logs -

以上就是使用 Docker 容器化 Laravel 和 PostgreSQL 应用的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1339027.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何为WordPress子目录重置Content-Security-Policy
上一篇 2025年12月13日 02:35:03
PHP SFTP多服务器文件快速上传教程
下一篇 2025年12月13日 02:35:10

相关推荐

  • Laravel服务容器的绑定与解析

    本篇文章给大家带来的内容是关于laravel服务容器的绑定与解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前言   老实说,第一次老大让我看laravel框架手册的那天早上,我是很绝望的,因为真的没接触过,对我这种渣渣来说,laravel的入门门槛确实有点高了,但还是得硬着头…

    2026年9月26日
    000
  • 小红书网页版怎么安全退出_小红书网页版账号安全退出教程

    小红书网页版怎么安全退出_小红书网页版账号安全退出教程小红书网页版怎么安全退出_小红书网页版账号安全退出教程小红书网页版怎么安全退出_小红书网页版账号安全退出教程小红书网页版怎么安全退出_小红书网页版账号安全退出教程

    小红书网页版安全退出需点击右上角头像,在下拉菜单中选择“退出登录”,退出后建议清除浏览器缓存与历史记录,并关闭无痕浏览窗口,同时定期修改密码、开启短信验证以提升账号安全性。 小红书网页版怎么安全退出?这是不少网友在使用公共设备或共享电脑时常关注的问题,接下来由PHP小编为大家带来小红书网页版账号安全…

    2026年9月26日 • 用户投稿
    100
  • laravel框架中超实用的功能介绍

    本篇文章给大家带来的内容是关于laravel框架中超实用的功能介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 让lumen的dd() dump()像laravel一样优雅 composer require symfony/var-dumper 获取执行的sql语句 可查看sql…

    2026年9月26日
    000
  • WebSailor— 阿里通义实验室开源的网络智能体

    WebSailor— 阿里通义实验室开源的网络智能体WebSailor— 阿里通义实验室开源的网络智能体WebSailor— 阿里通义实验室开源的网络智能体WebSailor— 阿里通义实验室开源的网络智能体

    WebSailor是什么 websailor 是由阿里通义实验室推出的开源网络智能体,专注于处理复杂的检索与推理任务。借助创新的数据合成方法(如 sailorfog-qa)以及训练技术(包括拒绝采样微调和 dupo 算法),该模型在高难度任务中表现出色,在 browsecomp 等评测中超越多个主流…

    2026年9月26日 • 用户投稿
    200
  • laravel框架的中间件middleware的详解

    laravel框架的中间件middleware的详解laravel框架的中间件middleware的详解laravel框架的中间件middleware的详解laravel框架的中间件middleware的详解

    本篇文章给大家带来的内容是关于laravel框架的中间件middleware的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 laravel中间件是个非常方便的东西,能将一些逻辑实现解耦,并且在laravel中,中间件的编写也是非常的方便。谁用谁知道。 1.装饰器模式 lara…

    2026年9月26日 • 用户投稿
    000
  • VSCode 如何通过插件实现代码的情绪分析功能 VSCode 代码情绪分析插件的创意使用方法​

    目前vscode无现成代码情绪分析插件,但可通过nlp技术、代码质量指标和git历史分析间接实现;2. 情绪识别可从注释、字符串、变量名、提交信息中的关键词入手,结合正则提取与情感词库或外部nlp服务判断情绪倾向;3. 分析结果可通过装饰器高亮、状态栏提示或输出面板可视化;4. 该功能在团队协作中可…

    2026年9月26日
    000
  • firefox官网首页入口 火狐浏览器手机版免费下载地址

    firefox官网首页入口 火狐浏览器手机版免费下载地址firefox官网首页入口 火狐浏览器手机版免费下载地址firefox官网首页入口 火狐浏览器手机版免费下载地址firefox官网首页入口 火狐浏览器手机版免费下载地址

    火狐浏览器官网首页入口是https://www.mozilla.org/zh-CN/firefox/new/,该页面提供手机版免费下载链接,并介绍其核心特性如阻止跟踪器、沙盒技术、多设备同步和隐私浏览模式。 firefox官网首页入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来火狐浏览…

    2026年9月26日 • 用户投稿
    000
  • Larave框架下Contracts契约的解析

    本篇文章给大家带来的内容是关于larave框架下contracts契约的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Contracts Laravel 的契约是一组定义框架提供的核心服务的接口, 例如我们在介绍用户认证的章节中到的用户看守器契约IllumninateCont…

    2026年9月26日
    000
  • laravel如何创建自定义的Artisan命令_Laravel自定义Artisan命令教程

    答案:在 Laravel 中创建自定义 Artisan 命令可自动化常用任务,使用 make:command 生成命令类,配置 signature 和 description 属性定义调用方式与描述,于 handle() 方法编写逻辑,通过 argument() 和 option() 获取参数与选项…

    2026年9月26日
    000
  • sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置

    sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置sublime怎么给vue文件设置高亮_sublime Vue文件语法高亮设置

    Sublime Text 默认不支持 Vue 文件的语法高亮,但可以通过安装插件来实现。Vue 文件是混合语法(HTML、JavaScript、CSS),需要专门的语法定义才能正确高亮。以下是设置步骤: 1. 安装 Package Control(如未安装) 如果还没安装 Package Contr…

    2026年9月26日 • 用户投稿
    000
  • 别再浪费纸了!一文掌握“双面打印”的正确姿势

    别再浪费纸了!一文掌握“双面打印”的正确姿势别再浪费纸了!一文掌握“双面打印”的正确姿势别再浪费纸了!一文掌握“双面打印”的正确姿势别再浪费纸了!一文掌握“双面打印”的正确姿势

    你是否也曾为家中或办公室里堆积如山的废纸感到惋惜? 你是否在打印一份几十页的报告时,默默看着打印机“哗哗”吐出厚厚一叠纸张,心里泛起一丝浪费的不安? 其实,你距离成为一位高效、节约又环保的打印高手,只差一个“双面打印”的操作。 别再用“不会设置”、“太麻烦”当作借口,让纸张白白流失。 今天,我们就来…

    2026年9月26日 • 用户投稿
    1500
  • Laravel框架中Pipeline的解析(代码示例)

    本篇文章给大家带来的内容是关于laravel框架中pipeline的解析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 大家好,今天给大家介绍下Laravel框架的Pipeline。 它是一个非常好用的组件,能够使代码的结构非常清晰。 Laravel的中间件机制便是基于…

    2026年9月26日
    000
  • sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键

    sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键sublime怎么格式化代码_Sublime Text代码格式化设置与快捷键

    Sublime Text通过安装HTML-CSS-JS Prettify等插件可实现代码格式化,需先安装Package Control,再通过命令面板搜索并安装插件,随后在Key Bindings中添加快捷键配置,如Ctrl+Alt+F用于格式化JS/HTML/CSS文件,保存后即可使用;注意确保文…

    2026年9月26日 • 用户投稿
    100
  • Node.js spawn 命令参数解析与 shell: true 的应用

    Node.js spawn 命令参数解析与 shell: true 的应用Node.js spawn 命令参数解析与 shell: true 的应用Node.js spawn 命令参数解析与 shell: true 的应用Node.js spawn 命令参数解析与 shell: true 的应用

    本文探讨Node.js child_process.spawn 函数在处理复杂命令行参数时遇到的常见问题,特别是当参数包含路径或需要特殊解释时,可能导致目标程序(如Java)无法正确识别。通过引入 shell: true 选项,并结合正确的参数格式化,可以有效解决此类问题,同时强调了使用此选项时的安…

    2026年9月26日 • 用户投稿
    000
  • Windows Server 2012 Hyper-V群集图文教程

    Windows Server 2012 Hyper-V群集图文教程Windows Server 2012 Hyper-V群集图文教程Windows Server 2012 Hyper-V群集图文教程Windows Server 2012 Hyper-V群集图文教程

    接下来我们将继续测试windows server 2012 hyper-v群集功能,以实现虚拟机的高可用性。 实验环境: 四台服务器均运行Windows Server 2012 DataCenter操作系统。 SRV2012服务器上安装了iSCSI目标服务器角色,并配置了两个虚拟磁盘,供两台群集服务…

    2026年9月26日 • 用户投稿
    100
  • Laravel Eloquent的技巧分享(示例讲解)

    本篇文章给大家带来的内容是关于laravel eloquent的技巧分享(示例讲解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Laravel 是一个功能丰富的框架。但是,你无法从官方文档中找到所有可用的功能。以下是一些你可能不知道的功能。 1.获取原始属性 当修改一条 Elo…

    2026年9月26日
    100
  • laravel项目之发布导致的BUG(环境变量问题)

    本篇文章给大家带来的内容是关于laravel项目之发布导致的BUG(环境变量问题) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 laravel项目的某一次发布后,项目中连接数据库突然报错,而用同样的数据库账号密码在机器上连接是可以的。 临时解决方案 经过短暂时间的排查,没找到原…

    2026年9月26日
    300
  • 实现搜索结果按字母排序:PHP结合Ajax的专业教程

    本文档旨在提供一种使用PHP和Ajax对通过POST方法获取的搜索结果进行A-Z排序的解决方案。我们将创建一个表单,保存POST数据,并利用PHP函数对医生列表进行排序,最终通过Ajax实现无需刷新页面的排序功能。 1. 修改 search.php 文件 首先,我们需要在 search.php 文件…

    2026年9月26日
    000
  • 网易云音乐网页版在线播放网址 网易云音乐网页版官网登录入口

    网易云音乐网页版官网登录入口为https://music.163.com/,支持在线播放、MV搜索、歌单管理、电台收听及内容收藏分享等功能,界面简洁,适配多设备,涵盖新碟、榜单、独立音乐人及场景化音频内容。 网易云音乐网页版在线播放网址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来网易云…

    2026年9月26日
    000
  • sublime的gitgutter插件怎么用_sublime GitGutter插件使用方法

    sublime的gitgutter插件怎么用_sublime GitGutter插件使用方法sublime的gitgutter插件怎么用_sublime GitGutter插件使用方法sublime的gitgutter插件怎么用_sublime GitGutter插件使用方法sublime的gitgutter插件怎么用_sublime GitGutter插件使用方法

    GitGutter是Sublime Text插件,可在行号旁显示Git修改状态。安装需通过Package Control搜索并安装GitGutter,完成后在Git仓库中自动显示+(新增)、~(修改)、-(删除)、▶(移动)图标,颜色分别为绿、黄、红。默认启用实时检测,可设置保存后更新或禁用,支持自…

    2026年9月26日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信