指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
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高精度数学运算无
bz2bzip2 压缩支持libbz2-dev
calendar日历计算函数无
ctype字符检测函数无
curlcURL 支持libcurl4-openssl-dev
dba数据库抽象层取决于后端
domDOM XML 支持libxml2-dev
exif图片 EXIF 元数据无
fileinfo文件信息支持无
ftpFTP 支持无
gd图像处理libpng-dev、libjpeg-dev、libfreetype6-dev
gettextGNU gettextlibgettextpo-dev
gmp大整数运算libgmp-dev
iconv字符集转换无
intl国际化libicu-dev
jsonJSON 处理(PHP7.2+ 内置,通常无需装)无
ldapLDAP 访问libldap2-dev
mbstring多字节字符串无
mysqliMySQLi无
pdoPDO 基础无
pdo_mysqlPDO MySQL无
pdo_pgsqlPDO PostgreSQLlibpq-dev
pdo_sqlitePDO SQLite无
pgsqlPostgreSQL 扩展libpq-dev
pharPhar 打包无
posixPOSIX 支持无
session会话管理无
shmop共享内存无
simplexmlSimpleXMLlibxml2-dev
soapSOAP 客户端/服务端libxml2-dev
socketsSocket 支持无
sysvmsgSystem V 消息队列无
sysvsemSystem V 信号量无
sysvshmSystem V 共享内存无
tokenizerPHP 代码解析无
xmlXML 基础libxml2-dev
xmlreaderXML 读取libxml2-dev
xmlwriterXML 写入libxml2-dev
xslXSLT 转换libxslt1-dev
zipZIP 压缩libzip-dev
opcache字节码缓存无
需要使用 pecl install 安装的有
扩展名说明安装示例
redisRedis 客户端pecl install redis && docker-php-ext-enable redis
xdebugPHP 调试工具pecl install xdebug && docker-php-ext-enable xdebug
imagickImageMagick 图像处理需要先装 libmagickwand-dev
mongodbMongoDB 驱动pecl install mongodb
apcuAPC 用户缓存pecl install apcu
yamlYAML 解析需要 libyaml-dev
memcachedMemcached 客户端需要 libmemcached-dev
amqpRabbitMQ 客户端需要 librabbitmq-dev
grpcgRPC 支持pecl install grpc
uvlibuv 事件循环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 目录里找不到它们。