docker-php-ext-configure、docker-php-ext-install和docker-php-ext-enable是做什么的?

16

我正在尝试使用Docker搭建一个LAMP Web服务器,很高兴发现php的好心人们已经为php准备了docker容器

在阅读文档时,我找到了三个函数,这些函数似乎可以帮助我安装php扩展:

  • docker-php-ext-configure
  • docker-php-ext-install
  • docker-php-ext-enable

由于我完全是php的新手,并且曾尝试过使用apk addphp.inihackery启用php模块(导致出现.so not found错误),因此我准备承认失败并以正确方式进行操作。

不幸的是,文档对这些命令的功能及其使用方法非常含糊:

我们提供了helper脚本docker-php-ext-configure、docker-php-ext-install和docker-php-ext-enable,以更轻松地安装PHP扩展。

我还试图在Google上搜索,但也找不到任何有用的在线资源。

我现在对安装、配置和安装php扩展之间的区别非常困惑,以及类似于 apk add php7-* 这样的命令与所有这些内容的关系。

请解释这些功能是做什么的,并说明如何使用它们来启用php扩展。

3个回答

20

这些是帮助安装 PHP 扩展的辅助脚本

  • 并非所有扩展都可以在分发原生包管理器或 PECL 中找到
  • 即使存在,也可能希望对其进行不同的配置或优化

谈论这些脚本

  • docker-php-ext-configure - 在使用 docker-php-ext-install 构建之前配置扩展。它由 docker-php-ext-install 执行,因此如果想要覆盖默认设置,则应使用它
  • docker-php-ext-install - 从源代码构建扩展,通常会执行 docker-php-ext-configure 进行构建配置,并通过执行 docker-php-ext-enable 启用扩展(php.ini 条目)
  • docker-php-ext-enable - 通过向 php.ini 添加特定条目来启用已安装的扩展。使用 pecl 或原生包管理器安装的扩展可能不会默认启用,因此需要进行此额外步骤。如上所述,使用 docker-php-ext-install 安装的扩展将自动启用。

1
这些函数可以帮助您设置 PHP 配置,例如,如果您想将 opcache 添加到您的 PHP 配置中:
首先按照以下方式进行配置:
docker-php-ext-configure gd \
    --enable-gd-native-ttf \
    --with-jpeg-dir=/usr/lib \
    --with-freetype-dir=/usr/include/freetype2 && \
    docker-php-ext-install gd \

并且您安装了您的配置

  && docker-php-ext-install opcache 

然后你可以启用它。
  && docker-php-ext-enable opcache

谢谢您。您能解释一下为什么要在安装之前进行配置吗?这是否意味着我们不需要执行“apt install php-ocache”命令? - quant
如果您想在PHP中启用带有LibJPEG的GD库,则需要配置以启用gd库。如果您需要实现opcache,则取决于您在Docker容器上使用的操作系统。 - Samir Guiderk
但是您绝对需要执行apt install php-ocache来将其安装到您的容器中。 - Samir Guiderk
2
那么,为了使用opcache php扩展,我需要执行apt-get install php-opcache,然后执行docker-php-ext-configuredocker-php-ext-installdocker-php-ext-enable吗? - quant
另外,当我有“docker-php-ext-install”时,为什么要执行“apt-get install”?有什么区别吗? - quant
显示剩余2条评论

1

我有同样的问题,并且对其他答案中的细节水平不满意。

docker-php-ext-install等实用程序的代码在PHP docker镜像中。以下是一些示例:

php7.3-fpm中的docker-php-ext-install具有这些有趣的部分(忽略选项解析等):

docker-php-source extract
cd /usr/src/php/ext

# skip usage, option parsing and checking the extension list

for ext in $exts; do
    cd "$ext"
    [ -e Makefile ] || docker-php-ext-configure "$ext"
    make -j"$j"
    make -j"$j" install
    find modules \
        -maxdepth 1 \
        -name '*.so' \
        -exec basename '{}' ';' \
            | xargs -r docker-php-ext-enable ${iniName:+--ini-name "$iniName"}
    make -j"$j" clean
    cd "$popDir"
done

这意味着在编译时,到处都可以看到的-j$(nproc)指定了同时运行的make命令数与处理器数量相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接