V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MengiNo
V2EX  ›  问与答

请教一下, PHP 扩展用 docker- PHP -ext 系列函数和自己编译或者 pecl 安装有啥区别呢

  •  
  •   MengiNo · 2022-09-26 12:14:56 +08:00 · 465 次点击
    这是一个创建于 576 天前的主题,其中的信息可能已经有所发展或是发生改变。

    周末测试了下把一些扩展编译 so 的过程改成多段构建(先不管为什么),最后一步是 FROM php:fpm-alpine 然后 COPY --from=0 /path/to/so /path/to/so。结果意外发现,这样搞比 FROM phpswoole:8.1-alpine 当底的镜像,最终成包多了 30M 左右。

    于是就单独起了个 fpm-alpine 的容器自己操下载源码安装,在默认的情况下,最终出来的 so 是 34M ,但是 phpswoole:8.1-alpine (有开 http2/json 等其他选项) 里的 so 只有 2.8M ,再根据 swoole 官方的 Dockerfile ,自己在 fpm-alpine 的容器里执行了下,全部默认的情况下,只有 2.4M 。

    也就是说。在同一份源码的情况下,用 docker-php-source && docker-php-ext-configure && docker-php-ext-install 比自己 phpize && configure && make 最后出包要少 30M 。再次尝试了下 pecl install swoole 的一键安装方案,结果出来的 so 和自己编译的一样,34M 。

    小弟对 PHP 底层这块确实了解不多,请问老哥们有什么头绪么。如果 docker-php-ext-x 系列函数有什么特殊优化,那不是应该所有扩展都用它装么,为啥 swoole 官方依然选择了 pecl 安装 redis 扩展呢。还是 swoole 这个扩展本身有什么玄机?

    2 条回复    2022-09-28 08:55:26 +08:00
    julyclyde
        1
    julyclyde  
       2022-09-27 08:52:36 +08:00
    从机制上讲:你 copy 的不一定是齐全的
    大部分 pecl 都只是“某个库的 PHP 语言 binding”
    你只 copy 过来这个 binding 文件是没法用的
    littlezzll
        2
    littlezzll  
       2022-09-28 08:55:26 +08:00 via Android
    docker-php-ext-xx 本质上还是编译的 shell 脚本,打开看看怎么写的就知道了,包含了加入 ini 配置和删除源码的步骤,还有别的一些操作,pecl 编译完我记得 /tmp 存的还有东西的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5634 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 01:34 · PVG 09:34 · LAX 18:34 · JFK 21:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.