当前位置: 首页 > 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 .........

安装完成。

http://www.lryc.cn/news/410617.html

相关文章:

  • 医院综合绩效核算系统,绩效核算系统源码,采用springboot+avue+MySQL技术开发,可适应医院多种绩效核算方式。
  • ROOM数据快速入门
  • 刷新,前面接口的返回值没有到,第二个接口已经请求完了,导致第二个接口返回数据错误
  • pdcj设计
  • 【数据结构】哈希表的模拟实现
  • 面试经典算法150题系列-数组/字符串操作之多数元素
  • 海南云亿商务咨询有限公司领航抖音电商服务
  • C#初级——继承
  • Github 2024-07-29 开源项目日报 Top10
  • nginx反向代理和负载均衡+安装jdk-22.0.2
  • 软考高级科目怎么选?软考高级含金量排序
  • 【机器学习西瓜书学习笔记——模型评估与选择】
  • vue3+cesium创建地图
  • Zookeeper客户端和服务端NIO网络通信源码剖析
  • 从DevOps到DevSecOps是怎样之中转变?
  • ORM与第三方数据库对接的探讨及不同版本数据库的影响
  • Windows远程桌面无法拷贝文件问题
  • 优化数据处理效率,解读 EasyMR 大数据组件升级
  • 并发编程AtomicInteger详解
  • ctfshow 权限维持 web670--web679
  • 职场生存指南
  • Spring源码(八)--Spring实例化的策略
  • 部署KVM虚拟化平台
  • Java对象模型深度剖析:从POJO到ENTITY
  • Nginx日志分析:编写Shell脚本进行全面日志统计
  • 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)
  • C语言——运算符及表达式
  • Python面试宝典第23题:分发糖果
  • Java与模式及其应用场景知识点分享(电子版)
  • 软考高级第四版备考--第36天(审计内容)