使用 PHP 和 Docker 设置开发环境

2023-10-29

本地开发环境对于 PHP 开发人员测试和调试应用程序至关重要。传统上,开发人员会依赖 XAMPP、MAMP 或 WAMP 等工具,它们为本地开发提供成熟的 LAMP 堆栈(Linux、Apache、MySQL、PHP)。然而,随着应用程序变得越来越复杂并且需要准确模拟生产环境,Docker 已成为首选解决方案。

Docker 允许开发人员将他们的应用程序容器化,确保它们在不同环境中一致运行。在本文中,我们将指导您完成使用 Docker 设置 PHP 本地开发环境的过程。

先决条件

  • Docker 安装在你的机器上。如果您尚未安装 Docker,请访问 Docker 官方网站以获取说明。
  • Docker 及其命令行界面的基础知识。

步骤 1. 创建 Dockerfile

第一步是创建一个Dockerfile,它描述了我们的 PHP 应用程序的环境。


FROM php:8.2-apache

# Install required PHP extensions
RUN docker-php-ext-install mysqli pdo pdo_mysql

# Enable Apache mod_rewrite
RUN a2enmod rewrite

# Copy your application files to the container
COPY ./src/ /var/www/html/

步骤 2. 设置 Docker Compose

Docker Compose 允许我们定义和运行多容器 Docker 应用程序。当您的 PHP 应用程序依赖于 MySQL 等其他服务时,这非常有用。

创建一个docker-compose.yml file:


version: '3'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password

步骤 3. 构建并运行

和你的Dockerfile and docker-compose.yml在适当的位置,导航到终端中包含这些文件的目录并运行:

docker-compose up -d 

该命令将:

  • 根据您的需要构建 Docker 镜像Dockerfile.
  • 启动 PHP 和 Apache 的容器,代码在./src正在服务的目录。
  • 使用官方 MySQL 8.0 映像启动 MySQL 容器。

步骤 4. 访问应用程序

一切就绪后,您可以通过导航到访问您的 PHP 应用程序http://localhost在您的浏览器中。同样,您可以使用在中指定的凭据连接到 MySQL 数据库。docker-compose.yml file.

步骤 5. 停止并移除容器

要停止正在运行的容器,请使用:

docker-compose down 

使用 Docker 的优点

  • 隔离:Docker 容器确保您的应用程序运行相同,无论 Docker 在何处运行。
  • 环境版本控制:Docker 允许您指定 PHP、Apache 和其他服务的确切版本,确保所有开发环境的一致性。
  • 与现代开发工具集成:许多 CI/CD 工具现在都支持 Docker,从而可以更轻松地将应用程序从开发推向生产。

结论

使用 Docker 设置 PHP 本地开发环境可提供一致性、灵活性和易用性。通过容器化您的应用程序,您可以确保它在不同阶段的行为方式相同,从而减少“它在我的机器上运行”问题。当您继续 Docker 之旅时,您可以探索更高级的主题,例如优化 Docker 映像、与其他工具集成以及使用 Docker Swarm 或 Kubernetes 进行编排。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP 和 Docker 设置开发环境 的相关文章

  • VisionOn 一款集流程图、思维导图、白板于一体的轻量级在线制图工具

    Vision On 一款集流程图 思维导图 白板于一体的轻量级在线图形工具 在工作和学习过程中 通过可视化的图形 有助于清晰高效地表达我们的灵感 想法 思想 工欲善其事 必先利其器 目前 思维导图软件已经有 Xmind Mindnode M
  • 【转载】亚信科技亮相中国高速公路信息化大会,与云南云通数联达成战略合作

    3月30至31日 我国交通行业颇具影响力的第25届中国高速公路信息化大会暨技术产品博览会 在福州市海峡国际会展中心盛大举办 数百家产业链企业齐聚 共谋高速公路数智化发展 亚信科技携系列数智化创新成果亮相展会 大会期间 亚信科技 南京 有限公
  • jQuery 的设置属性值,和获取属性值,attr()和prop();

    jQuery 的设置属性值 和获取属性值 attr 和prop attr 属性 获取属性值 attr 属性 属性值 设置属性的属性值 prop 属性 获取属性值 prop 属性 属性值 设置属性的属性值 两者的区别 attr可以获得和定义自
  • Chrome 89 更新 js 事件触发顺序,导致99%的文章都错了(包括MDN)

    大家好 我是秋风 嗯 我又来了 这次又是在 楠溪和的讨论中产生的问题 那事情是怎么样的呢 起因 最近楠溪在看事件相关的文章 然后就跑来和我讨论说以下代码的执行效果和网上的文章不一致 代码如下 div div
  • verdaccio内网离线搭建npm私有仓库

    使用场景 前端项目的编译运行开发中报下载经常出错 项目场景 通常我们前端项目开发搭建过程中通过npm管理前端js库 新建项目或内网开发过程中经常出现环境搭建的问题 例如常见错误Failed at the chromedriver 2 37
  • QT学习一:利用QT QAxObject读取Excel表格数据的两种方法比较

    目录 QAxObject QVariant 1 逐单元格读取表格内容 2 一次性读取工作表使用范围 利用QT的 QAxObject读取Excel表格数据的两种方法比较 完整的QT源码到此下载 ReadExcel rar 嵌入式文档类资源 C
  • 计算机视觉与深度学习-经典网络解析-VGG-[北邮鲁鹏]

    目录标题 VGG 参考 VGG网络贡献 使用尺寸更小的 3 times 3 卷积串联来获得更大的感受野 放弃使用 11 times 11 和 5 times 5 这样的大尺寸卷积核 深度更深 非线性更强 网络的参数也更少 去掉了AlexNe
  • 黑马并发编程JUC总结

    并发编程总结1 并发编程 2 进程和线程 2 1定义 2 2并发和并行 2 3应用 异步调用 并发应用 3 java线程 3 1线程创建 创建线程方法1 创建方法2 Thread和Runable的区别 创建方法3 3 2线程运行 3 3线程
  • [Coursera 数字图像和视频处理基础]第一周

    开始跟Coursera上的数字图像和视频处理基础这门课 这次学习笔记记录下第一周的学习内容 第一周的内容很少 介绍了一些非常基础的知识 概括如下 并且记录了最后的答题作业 课程主页截图 1 模拟VS数字信号 首先是信号的定义 我搜了一点资料
  • 稠密连接网络(DenseNet)

    ResNet极大地改变了如何参数化深层网络中函数的观点 稠密连接网络 DenseNet Huang et al 2017 在某种程度上是ResNet的逻辑扩展 让我们先从数学上了解一下 1 从ResNet到DenseNet 回想一下任意函数
  • python: 字典 (dict) 的使用

    摘要 在刷 leecode 的题目时 会经常使用哈希表 在 python 中称为字典 dict 由于本人平时不怎么多使用字典 在真正运用时经常忘记其常规用法 特别是其成员函数的使用 因此 本人根据自己在刷 leecode 时经常使用字典的方
  • 深度学习与计算机视觉系列(8)_神经网络训练与注意点

    作者 寒小阳 时间 2016年1月 出处 http blog csdn net han xiaoyang article details 50521064 声明 版权所有 转载请联系作者并注明出处 1 训练 在前一节当中我们讨论了神经网络静
  • Memcache查看列出所有key方法

    Memcached查看列出所有key方法 测试的过程中 发现Memcached没有一个比较简单的方法可以直接象redis那样keys 列出所有的Session key 并根据key get对应的session内容 具体操作如下 登录MemC
  • bugkuctf-Simple_SSTI_2

    方法一 tplmap 直接扫 python2 tplmap py u http 114 67 175 224 10589 flag 可以注入 使用 os shell提权 python2 tplmap py u http 114 67 175
  • 7.recurrent_neural_network

    device torch device cuda if torch cuda is available else cpu sequence length 28 input size 28 hidden size 128 num layers
  • windows环境与Linux环境下调用c++程序

    在此之前 需要在java编译软件IDEL中配置本地的Maven仓库等 可自行网上搜索配置 一 在Windows系统下调用c 软件生成的dll文件 1 在IDEL中创建Maven工程 配置下载jna包等 在pom文件中写入如下配置即可
  • 软件测试2019:第三次作业

    一 单元测试的任务有哪些 1 模块接口测试 2 模块局部数据结构测试 3 模块边界条件测试 4 模块中所有独立执行通路测试 5 模块的各条错误处理通路测试 二 代码评审方法有哪些 你认为哪一种比较有效 理由是什么 代码评审方法分为代码走查和
  • 什么时候开始使用Redis

    思考这个问题的本质就是要学会取舍和选型 技术选型非常重要 大多人为了技术而技术 这是不可取的 就想小彬认为微服务必须解决分布式事务一样 但他却不知道为什么要用分布式事务 从而不知道什么时候要用分布式事务 就想Redis一样 什么时候要用Re
  • jmap 文件解析_干货分享丨jvm系列:dump文件深度分析

    摘要 java内存dump是jvm运行时内存的一份快照 利用它可以分析是否存在内存浪费 可以检查内存管理是否合理 当发生OOM的时候 可以找出问题的原因 那么dump文件的内容是什么样的呢 JVM dump java内存dump是jvm运行
  • 【springboot】如何在自己的springboot项目中引用别的springboot项目jar

    正好今天碰到了 就在这里总结下 习惯了将公用的项目打包成jar 然后当做工具类引入到自己项目中 直接调用 感觉甚是方便 但有没有发现 平时我们引用的大部分情况下是一个maven项目 然后打包好的jar也是maven项目的结构 所以我们可以正

随机推荐

  • VS使用技巧汇总

    总目录 文章目录 总目录 前言 一 快捷技巧 1 代码片段快捷方式 2 选择性粘贴 3 快速停靠窗口 4 多行同步快速编辑 5 引用命名空间 6 整行上下移动 7 快捷键 二 VS功能 1 打开VS自带反编译 2 VS扩展插件 三 其他 总
  • win10远程登录Ubuntu14.04图形化界面

    一 使用场景 因工作原因 需要在window与Linux系统同时操作 由于虚拟机卡顿 十分影响工作效率 于是找领导又申请一台电脑 Ubuntu主机主要日常代码编译与git操作 window主机主要用于日常沟通 资料查询 测试研发 windo
  • go语言重大bug,make缓存读取数据漏洞,4096漏洞

    做一个小程序 需要对文件内容分片读取 但是读取过程中发现数据读取不全 经测试多个make缓存读取文件时发现问题 以下为漏洞测试部分 一 生成测试文件 AAA txt 创建一个AAA txt文件 写入1万个A wFile os OpenFil
  • KMP算法原理

    所有下标从0开始 子串的定位操作通常称为串的模式匹配 它求的是子串 或称模式串 在主串中的位置 前缀 除最后一个字符外 字符串的所有头部子串 后缀 除第一个字符外 字符串的所有尾部子串 部分匹配值 字符串的前缀和后缀的最长相等前后缀长度 字
  • Linux网络编程:多进程 多线程_并发服务器

    文章目录 一 wrap常用函数封装 wrap h wrap c server c封装实现 client c封装实现 二 多进程process并发服务器 server c服务器 实现思路 代码逻辑 client c客户端 三 多线程threa
  • JS 面试题集合(二)

    一 延迟加载 JS 有哪些方式 延迟加载 async defer 例如 defer 等html全部解析完成 才会执行js代码 顺次执行js 脚本 async asyc 是和 html 解析同步的 一起的 不是顺次执行 js 脚本 谁先加载完
  • 破解极验(geetest)验证码

    最近在搞爬虫的时候在好几个网站都碰到了一种叫做geetest的滑动条验证码 一直没有太好的办法只能在触发这个验证码后发个报警去手动处理一下 http www geetest com exp embed是他们官网的样例 后来研究了下觉得要破解
  • FindBugs Bug Descriptions

    FindBugs Bug Descriptions This document lists the standard bug patterns reported byFindBugs version 1 3 9 Summary Descri
  • 【力扣】三数之和

    给你一个包含 n 个整数的数组 nums 判断 nums 中是否存在三个元素 a b c 使得 a b c 0 请你找出所有和为 0 且不重复的三元组 注意 答案中不可以包含重复的三元组 示例 1 输入 nums 1 0 1 2 1 4 输
  • KEIL 生成bin文件

    1 首先对于keil5其编译生成的HEX文件 一般通过勾选如下 在进行ISP烧写时 就可以通过传送HEX文件进行烧写 2 对于烧写而言不仅仅可以通过HEX文件进行烧写 还可以通过BIN文件进行烧写 且BIN文件比HEX文件更小 设置BIN文
  • Rust的内存安全三原则:所有权、借用及生命周期

    我们接下来要探讨的概念是Rust的内存安全及其零成本抽象原则的核心 它们让Rust能够在编译期检测程序中内存安全违规 在离开作用域时自动释放相关资源等情况 我们将这些概念称作所有权 借用和生命周期 所有权有点类似核心原则 而借用和生命周期是
  • 时序预测

    时序预测 MATLAB实现2 DCNN卷积神经网络时间序列预测 目录 时序预测 MATLAB实现2 DCNN卷积神经网络时间序列预测 预测效果 基本介绍 研究背景 模型结构 建模流程 程序设计 学习总结 参考资料 预测效果 基本介绍 一种基
  • Dolby与DTS杜比环绕与DTS环绕音响

    转自 http blog sina com cn s blog a15db8ae0101dlz7 html 杜比环绕与DTS环绕具有的相近之处在于它们都是属于有损的数字压缩技术 这种称为 感性的 数据压缩技术是基于人类心理声学上所具备的听音
  • AndroidStudio运行程序时启动虚拟机出现x86 emulation currently requires hardware acceleration!问题解决方法

    这个问题是没有安装intelhaxm android exe这个软件 找到 SDK安装目录 一般在C盘下C Users admini AppData Local Android Sdk extras intel Hardware Accel
  • C++:采用vector实现二分查找及其变种总结

    主要分为六种情况 闭区间 半开区间 中位值在循环之外的半开区间二分查找首个序列 中位值在循环之外的半开区间二分查找末尾序列 以及中位值在循环之外的完全开区间二分查找首个序列和中位值在循环之外的完全开区间二分查找末尾序列 include
  • 微信小游戏开发之四:使用three.js引擎

    一 前言 微信小游戏中最魔性的 跳一跳 就是基于three js 引擎开发的 看这里 不要再让我发邮箱了 源码放到github上了 GitHub地址 请自行下载 二 下载 three min js 打开页面 复制代码到本地 三 引用 使用如
  • Qt之输入对话框(QInputDialog)的相关参数(Qt::InputMethodHints)和(QLineEdit::EchoMode)学习

    本文参考文章 Qt 编程 输入对话框 QInputDialog 的使用 学习笔记 前言 QInputDialog类提供了一个简单的便捷对话框 可以从用户那里获取用户录入的单个值 当前Qt提供了五个静态接口函数用于获取常用的数据类型参数 单文
  • 【华为OD机试真题2023 JS】上班之路

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 上班之路 知识点BFS搜索广搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 Jungle生活在美丽的蓝鲸城 大马路都是方方正正 但是每天马路的封闭情况都不一样
  • 在 Bash 中获取明天的日期:实用演练

    在系统管理和 shell 脚本世界中 操作日期和时间的能力至关重要 无论是用于计划任务 日志轮换还是简单地为文件添加时间戳 了解如何在脚本中使用日期都可以节省大量时间和精力 Bash Bourne Again Shell 为此提供了一组强大
  • 使用 PHP 和 Docker 设置开发环境

    本地开发环境对于 PHP 开发人员测试和调试应用程序至关重要 传统上 开发人员会依赖 XAMPP MAMP 或 WAMP 等工具 它们为本地开发提供成熟的 LAMP 堆栈 Linux Apache MySQL PHP 然而 随着应用程序变得