记录一些常用的函数和瞎折腾的过程……

在php容器中安装php扩展

提醒:本文最后更新于 676 天前,文中所描述的信息可能已发生改变,请谨慎使用。

在docker的php容器中,有些扩展是需要自己安装的,安装方式有普通物理主机有所不同,在这里简单记录一下。

一、如何在docker容器中安装php自带的扩展模块?

1、进入到php容器中:

[root@server ~]$ docker exec -it php /bin/bash

2、查看php当前自带的扩展模块:

[root@server ~]$ php -m

或进入扩展模块目录下查看:

[root@server ~]$ cd /usr/local/bin

php自带的扩展若没有安装的话,可以使用以下命令进行安装:

3、安装gd扩展模块:

对于php 7.4及以上版本:

a、先安装gd相应的依赖包:

[root@server ~]$ apt-get install -y \
      libfreetype6-dev \
      libjpeg62-turbo-dev \
      libpng-dev \
      libwebp-dev \
      zlib1g-dev

b、添加gd库编译选项:

[root@server ~]$ docker-php-ext-configure gd \
     --enable-gd \
     --with-freetype \
     --with-jpeg \
     --with-webp

c、再安装gd扩展模块:

[root@server ~]$ docker-php-ext-install -j$(nproc) gd

对于php 7.2来说,安装有区别,具体如下:

a、安装gd相应的依赖:

[root@server ~]$ apt-get install \
    libwebp-dev \
    libjpeg62-turbo-dev \
    libpng-dev libxpm-dev \
    libfreetype6-dev

b、添加gd库编译选项:

[root@server ~]$ docker-php-ext-configure gd \
    --with-gd \
    --with-webp-dir \
    --with-jpeg-dir \
    --with-png-dir \
    --with-zlib-dir \
    --with-xpm-dir \
    --with-freetype-dir

c、安装gd扩展模块:

[root@server ~]$ docker-php-ext-install -j$(nproc) gd

针对php 7.2与7.4针对安装GD库的区别,具体可以参考:https://www.php.net/manual/en/image.installation.php

4、安装exif扩展模块:

[root@server ~]$ docker-php-ext-install exif

5、安装缓存器OPcache扩展:

[root@server ~]$ docker-php-ext-install opcache

6、安装pdo扩展模块

[root@server ~]$ docker-php-ext-install pdo_mysql

7、安装mysqli扩展模块

[root@server ~]$ docker-php-ext-install mysqli

8、安装zip扩展模块:

a、安装libzip依赖:

[root@server ~]$ apt-get install libzip-dev

b、安装zip扩展:

[root@server ~]$ docker-php-ext-install zip

9、安装sockets扩展:

[root@server ~]$ docker-php-ext-install sockets

10、安装bcmath扩展:

[root@server ~]$ docker-php-ext-install bcmath

二、如何在docker容器中安装第三方扩展?

以安装ioncube为例讲一下步骤:

1、切换到/usr/local/目录:

[root@server ~]$ cd /usr/local

2、下载安装包,根据自己使用的系统下载对应的64位或是32位包(下地地址:https://www.ioncube.com/loaders.php),可使用uname -a命令查看系统:

[root@server ~]$ wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz

3、解压安装包:

[root@server ~]$ tar -zxvf ioncube_loaders_lin_x86-64.tar.gz

4、解压后,可以看到里面有各个php版本对应的.so文件,根据你的php版本自行选择对应的,然后修改php.ini配置文件,在文件尾部添加如下代码:

[ionCube Loader]
zend_extension="/usr/local/ioncube/ioncube_loader_lin_7.4.so"

再以安装imagick为例讲一下安装步骤。

1、由于安装imagick扩展时需要依赖ImageMagick的函数库,因此必须要先安装ImageMagick

a、下载安装包(版本选择可前往:https://imagemagick.org/script/mirror.php/):

[root@server ~]$ wget https://imagemagick.org/archive/ImageMagick-7.1.0-40.tar.gz

b、解压安装包:

[root@server ~]$ tar -zxvf ImageMagick-7.1.0-40.tar.gz

c、进入安装目录:

[root@server ~]$ cd ImageMagick-7.1.0-40

d、进行配置:

[root@server ~]$ ./configure --prefix=/usr/local/imagemagick

e、执行安装:

[root@server ~]$ make && make install

2、安装PHP的扩展imagick:

安装imagick扩展时需要PHP >= 5.1.3,ImageMagick >= 6.2.4,可以从http://pecl.php.net/package/imagick找到imagick的最新的stable版本。

a、下载最新版本(下载地址:http://pecl.php.net/package/imagick):

[root@server ~]$ wget http://pecl.php.net/get/imagick-3.7.0.tgz

b、解压安装包:

[root@server ~]$ tar -zxvf imagick-3.7.0.tgz

c、进入安装目录:

[root@server ~]$ cd imagick-3.7.0

d、配置phpize:phpize是一个shell脚本,主要是用来进行编译环境的准备,执行以后会生成一些新的文件,为配置、编译及安装作好准备。在imagick-3.4.4目录中执行/usr/local/bin/phpize(php容器中的位置)以生成configure。

[root@server ~]$ /usr/local/bin/phpize

e、查找配置相关的php-config路径:

[root@server ~]$ find / -name php-config
/usr/local/bin/php-config

f、进行配置(将上一步的中php-config路径放入到--with-php-config):

[root@server ~]$ ./configure --with-php-config=/usr/local/bin/php-config --with-imagick=/usr/local/imagemagick

g、执行安装:

[root@server ~]$ make && make install

3.配置扩展:

打开配置文件php.ini(php容器中的位置:/usr/local/etc/php/php.ini),加入如下的一行 :

extension = "imagick.so"

然后执行php -m | grep imagick,发现已经出现imagick模块了,证明imagick已经生效了

在完成扩展安装后,退出并重启容器就可以生效了。

[root@server ~]$ exit
[root@server ~]$ docker restart php
[root@server ~]$ docker restart nginx

注意:如果进入容器无法使用wget之类的命令,请参考《docker容器中安装常用命令工具》。

我安装好的扩展模块目录为:/usr/local/lib/php/extensions/no-debug-non-zts-20190902/。这个目录根据系统和环境会有不同。