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

2022-09-26 12:14:56 +08:00
 MengiNo

周末测试了下把一些扩展编译 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 这个扩展本身有什么玄机?

473 次点击
所在节点    问与答
2 条回复
julyclyde
2022-09-27 08:52:36 +08:00
从机制上讲:你 copy 的不一定是齐全的
大部分 pecl 都只是“某个库的 PHP 语言 binding”
你只 copy 过来这个 binding 文件是没法用的
littlezzll
2022-09-28 08:55:26 +08:00
docker-php-ext-xx 本质上还是编译的 shell 脚本,打开看看怎么写的就知道了,包含了加入 ini 配置和删除源码的步骤,还有别的一些操作,pecl 编译完我记得 /tmp 存的还有东西的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX