Docker构建PHP7+Apache容器:如何确定PHP扩展依赖包?
快速确定PHP Docker扩展依赖的实用方法
嘿,我完全懂这种每次靠构建报错搜依赖的麻烦!当初我刚折腾PHP Docker容器的时候也踩过一模一样的坑,给你几个实用的方法,能帮你摆脱这种低效的试错:
1. 查官方PHP镜像的文档和示例
官方PHP镜像(就是你用的php:7.0-apache这类)的维护仓库里有非常详细的说明和现成的扩展安装示例。你可以直接查看对应版本镜像的Dockerfile,里面会有安装常用扩展的完整步骤,包括所需的依赖包。另外,PHP官方文档里每个扩展的安装章节,也会明确列出编译时需要的系统依赖(比如GD扩展需要libpng、libjpeg的开发库),对应到Debian/Ubuntu系统就是带-dev后缀的包。
2. 用apt-file搜索头文件依赖
大部分PHP扩展编译时需要的系统依赖,本质是需要特定的头文件(.h文件)。Debian/Ubuntu的apt-file工具可以帮你快速找到哪个包提供了这些头文件:
- 先在容器里安装并更新
apt-file:apt-get update && apt-get install -y apt-file && apt-file update - 比如要找GD扩展需要的
png.h,直接搜索:
结果里就会显示apt-file search png.hlibpng-dev是提供这个头文件的包,同理搜jpeg.h会找到libjpeg-dev。
3. 用自动化脚本简化安装
如果不想手动处理依赖,可以用社区维护的install-php-extensions脚本,它能自动检测并安装扩展所需的所有依赖,用法特别简单:
FROM php:7.0-apache RUN apt-get update && apt-get install -y wget \ && wget -O /usr/local/bin/install-php-extensions https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions \ && chmod +x /usr/local/bin/install-php-extensions \ && install-php-extensions gd
这个脚本会自动搞定libpng-dev、libjpeg-dev这些依赖,还能帮你编译安装扩展,省超多事。
举个优化后的GD扩展安装例子
结合上面的方法,如果你想让GD支持更多格式,你的Dockerfile可以写成这样:
FROM php:7.0-apache RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install gd \ && apt-get clean && rm -rf /var/lib/apt/lists/*
这里加了libfreetype6-dev让GD支持字体,最后清理apt缓存还能减小镜像体积。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

