当前位置: 首页 > news >正文

docker环境下php安装扩展步骤 以mysqli为例

docker环境下php安装扩展步骤 以mysqli为例

  • 1.0 前言
  • 2.0 php 扩展安装原理
  • 3.0 docker 环境下 php 扩展安装
    • 3.1 docker php 容器扩展安装路径及原理
    • 3.2 docker php 扩展脚本安装过程

同步发布在个人笔记[docker环境下php安装扩展步骤 以mysqli为例]( https://blog.lichenrobo.com/server-net/server-deploy/docker-php-ext/ ‎)

1.0 前言

最近在折腾服务器的时候,希望一个 web 应用可以实现对数据库的操作,很容易就想到用 php 来实现,因为php 有方便的 mysql 数据库支持(php7 后应为 mysqli )。但是 run 的时候发现 docker 的 php-fpm 镜像生成的容器没有安装 mysqli 扩展,需要手动配置。故有此笔记。

2.0 php 扩展安装原理

PHP扩展实际上是用C语言编写的动态链接库,用以增强PHP的功能。所以安装 php 扩展就是布置例如 mysqli.so 这样的动态链接库文件,并告知 php 文件位置,使其能够找到就成功了。
那么很显然的一种方法就是下载 mysqli 的源码并编译,然后在 php.ini 中配置相关信息。(可见从源码安装还是挺方便的,apt 的安装方式是方便,但是配置起来不太自由。)

然而 docker 里 php-fpm 镜像是已经安装好的,我们最好在此基础上进行安装,并且进入容器内部不算很方便,有时我们希望可以通过 dockerfile 或者 docker compose 的方式直接搞定扩展的事情。docker 镜像为我们提供了这样方便的选择,那就是一系列自带的安装脚本:

docker-php-source
docker-php-ext-enable 
docker-php-ext-install  
docker-php-ext-configure  

利用这些脚本我们就可以方便的配置 php 扩展,无需再去修改 php.ini 文件了;同时也使得我们可以通过 dockerfile 或者 docker compose 的方式在容器创建之初就配置好环境。

3.0 docker 环境下 php 扩展安装

以进入容器的方式安装 mysqli 为例。
首先我们可以通过命令 docker exec -it php-fpm_container bash 进入容器内部,运行命令 php -m 查看已经安装配置过的扩展。
此时显然列表里面没有 mysqli

3.1 docker php 容器扩展安装路径及原理

容器内和扩展安装有这么几个关键的文件路径

  • /usr/src/
    存放 php 源码。在初始状态只有源码压缩包,安装过程会生成 ./php 源码文件夹。
  • /usr/src/php/ext/
    生成的源码文件夹里各种扩展的源码文件所在处,以 mysqli 为例,源码就在 /usr/src/php/ext/mysqli 路径下。
  • /usr/local/lib/php/extensions/no-debug-non-zts-20xxxxxx
    安装扩展后,生成的动态链接库文件所在的位置,php 需要知道这个位置以便调用扩展。
  • /usr/local/bin
    docker-php 扩展安装脚本文件所在处。

整个安装原理就是:
解压获得扩展源码编译源码并把动态链接库文件放在指定位置配置php文件使其成功链接库文件

3.2 docker php 扩展脚本安装过程

Step 1 docker-php-source
虽然在容器内任意位置都可以运行这些脚本,但是我们还是去脚本所在的目录下看一下

$ cd /usr/local/bin
$ ls
docker-php-entrypoint     docker-php-ext-enable   docker-php-source  pear     pecl  phar.phar  php-config
docker-php-ext-configure  docker-php-ext-install  flask          peardev  phar  php        phpize

这里面就包含用到的所有脚本了。

第一步就是解压出所需的mysqli扩展源码。

$ docker-php-source extract
$ cd /usr/src
$ ls
php  php.tar.xz  php.tar.xz.asc
$ cd php/ext/
$ ls
...    mysqli    ...

进入路径 /usr/src/php/ext/ 能看到 mysql 源码文件夹,第一步就完成了。
注:docker-php-source delete 可以删除源码文件夹。

Step 2 docker-php-ext-install
mysqli 扩展是 php 源码里面就有的扩展,所以我们执行完第一步就有源码了,对于小众一些的非自带源码,我们就需要手动把源码文件夹布置在 /usr/src/php/ext/ 下,即可进行下一步。

$ docker-php-ext-install mysqli		# 后面参数是扩展源码的目录名
$ php -m
[PHP Modules]
...
mysqli
...[Zend Modules]

查看已安装扩展,就已经能看到 mysqli 扩展了。

Step 3 docker-php-ext-enable
这个命令实际上在上一步 install 后已经自动运行过了,所以新安装的扩展无需运行此步。对于有时不需要有时需要的扩展,可以通过 enable 来使能扩展功能。

$ docker-php-ext-enable mysqli		# 后面参数是扩展源码的目录名

实际意义可以类比为在 php.ini 文件中配置了相关扩展的功能。

Step 4 docker-php-ext-configure
当安装扩展的时候,如果需要自定义配置时,则可以在 docker-php-ext-install 后面使用。具体用法就看不同扩展的需求了。 mysqli 无需此步。

$ docker-php-ext-configure .........

安装完成。

相关文章:

docker环境下php安装扩展步骤 以mysqli为例

docker环境下php安装扩展步骤 以mysqli为例 1.0 前言2.0 php 扩展安装原理3.0 docker 环境下 php 扩展安装3.1 docker php 容器扩展安装路径及原理3.2 docker php 扩展脚本安装过程 同步发布在个人笔记[docker环境下php安装扩展步骤 以mysqli为例]( https://blog.lichenrobo.co…...

医院综合绩效核算系统,绩效核算系统源码,采用springboot+avue+MySQL技术开发,可适应医院多种绩效核算方式。

一、系统概述 作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可…...

ROOM数据快速入门

ROOM数据库快速入门 文章目录 ROOM数据库快速入门第一章 准备工作第01节 引入库第02节 布局文件第03节 activity类第04节 效果图 第二章 数据类第01节 实体类(表)第02节 数据访问类(DAO)第03节 数据Service层第04节 RoomDataBase …...

刷新,前面接口的返回值没有到,第二个接口已经请求完了,导致第二个接口返回数据错误

刷新,前面接口的返回值没有到,(前端)第二个接口已经请求完了(入参没有拿前面那个接口返回的数据),导致第二个接口返回数据错误...

pdcj设计

为了实现这些功能需求,我们需要设计多个数据库表来存储相关的数据,并编写相应的Java代码来处理业务逻辑。下面是各个功能需求对应的MySQL表结构以及部分Java代码示例。 商品设置管理 商品分类管理 商品分类表 (product_categories)CREATE TABLE produ…...

【数据结构】哈希表的模拟实现

文章目录 1. 哈希的概念2. 哈希表与哈希函数2.1 哈希冲突2.2 哈希函数2.3 哈希冲突的解决2.3.1 闭散列(线性探测)2.3.2 闭散列的实现2.3.3 开散列(哈希桶)2.3.4 开散列的实现 2.4 开散列与闭散列比较 1. 哈希的概念 在我们之前所接触到的所有的数据结构…...

面试经典算法150题系列-数组/字符串操作之多数元素

序言:今天是第五题啦,前面四题的解法还清楚吗?可以到面试算法题系列150题专栏 进行复习呀。 温故而知新,可以为师矣!加油,未来的技术大牛们。 多数元素 给定一个大小为 n 的数组 nums ,返回其…...

海南云亿商务咨询有限公司领航抖音电商服务

在当下这个瞬息万变的互联网时代,短视频平台尤其是抖音,正以惊人的速度重塑着消费者的购物习惯与商家的营销版图。在这场电商盛宴中,海南云亿商务咨询有限公司凭借其在抖音电商领域的深厚积累与前瞻视野,正逐步成为众多商家转型升…...

C#初级——继承

继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类(父类&#xff0…...

Github 2024-07-29 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目3非开发语言项目3Python项目1TypeScript项目1C++项目1Lean项目1HTML项目1免费编程学习平台:freeCodeCamp.org 创建周期:3302 天…...

nginx反向代理和负载均衡+安装jdk-22.0.2

ps -aux|grep nginx //查看进程 nginx 代理 nginx代理是负载均衡的基础 主机:192.168.118.60 这台主机只发布了web服务,没有做代理的任何操作 修改一下index.html中的内容 echo "this is java web server" > /usr/local/nginx/htm…...

软考高级科目怎么选?软考高级含金量排序

软考既是国家职业资格考试,又是职称资格考试,含金量很高。软考的报考不设置任何条件,可以跨级考试,也就是非相关专业的人,也可以直接考高级。因此近些年报考软考、尤其是软考高级的人越来越多。 软考高级证书&#xf…...

【机器学习西瓜书学习笔记——模型评估与选择】

机器学习西瓜书学习笔记【第二章】 第二章 模型评估与选择2.1训练误差和测试误差错误率误差 欠拟合和过拟合2.2评估方法留出法交叉验证法自助法 2.3性能度量查准率、查全率与F1查准率查全率F1 P-R曲线ROC与AUCROCAUC 代价敏感错误率与代价曲线代价曲线 2.4比较检验假设检验&…...

vue3+cesium创建地图

1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…...

Zookeeper客户端和服务端NIO网络通信源码剖析

文章目录 服务端的ServerCnxFactory到底是个什么东西?ServerCnxFactory 的作用ServerCnxFactory 的实现使用 ServerCnxFactory 的示例注意事项ServerCnxFactory是什么时候完成初始化的?初始化流程代码示例详细步骤1. 创建实例2. 配置3. 启动初始化时机总结服务端基于NIO的Ser…...

从DevOps到DevSecOps是怎样之中转变?

DevSecOps是DevOps实践的自然演进&#xff0c;其重点是将安全集成到软件开发和部署流程中。在DevOps和DevSecOps发展之前&#xff0c;企业通常在在软件部署前进行集中的安全测试&#xff0c;导致安全介入严重滞后&#xff0c;漏洞分风险无法及时修复&#xff0c;影响上线交付。…...

ORM与第三方数据库对接的探讨及不同版本数据库的影响

对象关系映射&#xff08;Object-Relational Mapping&#xff0c;ORM&#xff09;是一种将程序中的对象与数据库中的数据进行映射的技术&#xff0c;使开发者可以通过操作对象来间接操作数据库。然而&#xff0c;在实际应用中&#xff0c;ORM并不是总能完美地对接陌生的第三方数…...

Windows远程桌面无法拷贝文件问题

场景说明 Winwdows远程桌面&#xff0c;相比Linux方便一点就是&#xff0c;同是windows连接&#xff0c;其中复制粘贴功能&#xff0c;可以在两个windows无缝切换。 但最近笔者远程一台测试windows服务器时&#xff0c;发现无法在服务器上复制内容到本地&#xff0c;也无法从…...

优化数据处理效率,解读 EasyMR 大数据组件升级

EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前&#xff0c;我们已就其展开了多方位、多角度的详尽介绍。而此次&#xff0c;我们成功接入了大数据组件的升级和回滚功能&#xff0c;能够借助 EasyMR …...

并发编程AtomicInteger详解

AtomicInteger 是 Java 并发包 (java.util.concurrent.atomic) 中的一个原子变量类&#xff0c;用于对 int 类型的变量进行原子操作。它利用底层的 CAS&#xff08;Compare-And-Swap&#xff09;机制&#xff0c;实现了无锁的线程安全。AtomicInteger 常用于需要高效、线程安全…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...