php之docker容器安装php拓展
关于 docker-php-ext-install:
docker-php-ext-install 是官方 PHP Docker 镜像自带的工具脚本,专门用于安装 PHP 的内置扩展(bcmath、intl、xsl、gd、pdo_mysql 等等)
# build images (will actually only build if images not yet built or if something changed)
echo "Building Docker images..."
docker compose build nginx
docker compose build --no-cache php //不使用缓存, 但是没用
docker compose build solr
直接进入php容器里执行:
docker-php-ext-install bcmath //这也是可以安装成功的,但是不能立即生效,所以需要重启docker,但是之前的安装可能丢失
在容器里查看脚本路径:
root@d7842b65ff32:/var/www# cd /usr/local/bin
root@d7842b65ff32:/usr/local/bin# ls
composer docker-php-ext-configure docker-php-ext-install pear pecl phar.phar php-config wkhtmltoimage
docker-php-entrypoint docker-php-ext-enable docker-php-source peardev phar php phpize wkhtmltopdf
能使用 docker-php-ext-install 直接安装的拓展有
| 扩展名 | 说明 | 常见依赖 |
|---|---|---|
bcmath | 高精度数学运算 | 无 |
bz2 | bzip2 压缩支持 | libbz2-dev |
calendar | 日历计算函数 | 无 |
ctype | 字符检测函数 | 无 |
curl | cURL 支持 | libcurl4-openssl-dev |
dba | 数据库抽象层 | 取决于后端 |
dom | DOM XML 支持 | libxml2-dev |
exif | 图片 EXIF 元数据 | 无 |
fileinfo | 文件信息支持 | 无 |
ftp | FTP 支持 | 无 |
gd | 图像处理 | libpng-dev、libjpeg-dev、libfreetype6-dev |
gettext | GNU gettext | libgettextpo-dev |
gmp | 大整数运算 | libgmp-dev |
iconv | 字符集转换 | 无 |
intl | 国际化 | libicu-dev |
json | JSON 处理(PHP7.2+ 内置,通常无需装) | 无 |
ldap | LDAP 访问 | libldap2-dev |
mbstring | 多字节字符串 | 无 |
mysqli | MySQLi | 无 |
pdo | PDO 基础 | 无 |
pdo_mysql | PDO MySQL | 无 |
pdo_pgsql | PDO PostgreSQL | libpq-dev |
pdo_sqlite | PDO SQLite | 无 |
pgsql | PostgreSQL 扩展 | libpq-dev |
phar | Phar 打包 | 无 |
posix | POSIX 支持 | 无 |
session | 会话管理 | 无 |
shmop | 共享内存 | 无 |
simplexml | SimpleXML | libxml2-dev |
soap | SOAP 客户端/服务端 | libxml2-dev |
sockets | Socket 支持 | 无 |
sysvmsg | System V 消息队列 | 无 |
sysvsem | System V 信号量 | 无 |
sysvshm | System V 共享内存 | 无 |
tokenizer | PHP 代码解析 | 无 |
xml | XML 基础 | libxml2-dev |
xmlreader | XML 读取 | libxml2-dev |
xmlwriter | XML 写入 | libxml2-dev |
xsl | XSLT 转换 | libxslt1-dev |
zip | ZIP 压缩 | libzip-dev |
opcache | 字节码缓存 | 无 |
需要使用 pecl install 安装的有
| 扩展名 | 说明 | 安装示例 |
|---|---|---|
redis | Redis 客户端 | pecl install redis && docker-php-ext-enable redis |
xdebug | PHP 调试工具 | pecl install xdebug && docker-php-ext-enable xdebug |
imagick | ImageMagick 图像处理 | 需要先装 libmagickwand-dev |
mongodb | MongoDB 驱动 | pecl install mongodb |
apcu | APC 用户缓存 | pecl install apcu |
yaml | YAML 解析 | 需要 libyaml-dev |
memcached | Memcached 客户端 | 需要 libmemcached-dev |
amqp | RabbitMQ 客户端 | 需要 librabbitmq-dev |
grpc | gRPC 支持 | pecl install grpc |
uv | libuv 事件循环 | pecl install uv |
目前 php 镜像DockerFile配置(部分)
RUN sed -i 's|deb.debian.org|archive.debian.org|g' /etc/apt/sources.list \
&& sed -i '/security.debian.org/d' /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y \
libxslt1-dev \
libmagickwand-dev --no-install-recommends \
libzip-dev \
&& docker-php-ext-install xsl \
&& docker-php-ext-install bcmath \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install zip \
&& rm -rf /var/lib/apt/lists/*
为什么有的扩展必须用 pecl?
- PHP 官方源码包(
php-src)里并没有这些扩展的源码。 - 这些扩展是第三方维护的,独立版本更新,不随 PHP 发布绑定。
- Docker 镜像的
/usr/src/php/ext目录里找不到它们。
