发布于2026-07-19 阅读(0)
扫一扫,手机访问
这篇文章主要想讲清楚 docker-php-source、docker-php-ext-install、docker-php-ext-enable 和 docker-php-ext-configure 这四个命令到底是干什么用的,在 PHP 容器里它们各自做了哪些事情。很多人在写 Dockerfile 安装 PHP 扩展时,总会遇到这几个命令,却不太明白其中的原理。这篇内容就是为揭开这些命令的神秘面纱而准备的,所有案例均经过实际运行验证。
通过 pecl 方式安装,或者通过 PHP 容器中自带的几个特殊命令来安装——这些特殊命令可以在 Dockerfile 的 RUN 指令中直接使用。这里我们主要讨论第二种方案,即如何通过 PHP 容器中的几个特殊命令来安装 PHP 扩展。
docker-php-source、docker-php-ext-install、docker-php-ext-enable、docker-php-ext-configure
所有演示都在 PHP 容器中进行,PHP 容器启动很简单,这里不做过多介绍。
这个命令本质上就是在 PHP 容器中创建一个 /usr/src/php 目录,里面放了一些自带的文件。可以把它理解成一个从互联网下载下来的 PHP 扩展源码的存放目录。实际上,所有 PHP 扩展源码存放的路径是 /usr/src/php/ext。
格式:
docker-php-source extract | delete
参数说明:
extract:创建并初始化 /usr/src/php 目录delete:删除 /usr/src/php 目录案例:
root@803cbcf702a4:/usr/src# ls -l
total 11896 #此时,并没有php目录
-rw-r--r-- 1 root root 12176404 Jun 28 03:23 php.tar.xz
-rw-r--r-- 1 root root 801 Jun 28 03:23 php.tar.xz.asc
root@803cbcf702a4:/usr/src# docker-php-source extract
root@803cbcf702a4:/usr/src# ls -l
total 11900 #此时,生产了php目录,里面还有一些文件,由于篇幅问题,就不进去查看了
drwxr-xr-x 14 root root 4096 Aug 9 09:01 php
-rw-r--r-- 1 root root 12176404 Jun 28 03:23 php.tar.xz
-rw-r--r-- 1 root root 801 Jun 28 03:23 php.tar.xz.asc
root@803cbcf702a4:/usr/src# docker-php-source delete
root@803cbcf702a4:/usr/src# ls -l
total 11896 #此时,将已创建 php 目录给删除了
-rw-r--r-- 1 root root 12176404 Jun 28 03:23 php.tar.xz
-rw-r--r-- 1 root root 801 Jun 28 03:23 php.tar.xz.asc
root@803cbcf702a4:/usr/src#
这个命令用来启动 PHP 扩展。用 pecl 安装 PHP 扩展时,默认并不会自动启用,需要手动在 php.ini 中配置才能使用。而 docker-php-ext-enable 会自动帮我们完成启用操作,无需手动修改配置文件。
案例:
# 查看现有可以启动的扩展
root@517b9c67507a:/usr/local/etc/php# ls /usr/local/lib/php/extensions/no-debug-non-zts-20170718/
opcache.so redis.so sodium.so
root@517b9c67507a:/usr/local/etc/php#
# 查看redis 扩展是否可以启动
root@517b9c67507a:/usr/local/etc/php# php -m | grep redis
root@517b9c67507a:/usr/local/etc/php#
# 启动 redis 扩展
root@517b9c67507a:/usr/local/etc/php# docker-php-ext-enable redis
# 启动 成功
root@517b9c67507a:/usr/local/etc/php# php -m | grep redis
redis
root@517b9c67507a:/usr/local/etc/php#
# 说明,php容器中默认是没有php.ini配置文件的,加载原理如下所示
root@517b9c67507a:/usr/local/etc/php# php -i | grep -A 5 php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => (none)
# 核心是 /usr/local/etc/php/conf.d 目录下的扩展配置文件
Scan this dir for additional .ini files => /usr/local/etc/php/conf.d
Additional .ini files parsed => /usr/local/etc/php/conf.d/docker-php-ext-redis.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
root@517b9c67507a:/usr/local/etc/php#
这个命令用来安装并自动启动 PHP 扩展。
命令格式:
docker-php-ext-install "源码包目录名"
注意点:
/usr/src/php/ext 下/usr/src/php 这个目录,需要使用 docker-php-source extract 来生成docker-php-ext-install 安装的扩展在安装完成后,会自动调用 docker-php-ext-enable 来启动/usr/local/etc/php/conf.d 对应的配置文件即可案例:
# 卸载redis 扩展
root@803cbcf702a4:/usr/local# rm -rf /usr/local/etc/php/conf.d/docker-php-ext-redis.ini
root@803cbcf702a4:/usr/local# php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
root@803cbcf702a4:/usr/local#
# PHP容器默认是没有redis扩展的。所以我们通过docker-php-ext-install安装redis扩展
root@803cbcf702a4:/# curl -L -o /tmp/reids.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2
root@803cbcf702a4:/# cd /tmp
root@517b9c67507a:/tmp# tar -xzf reids.tar.gz
root@517b9c67507a:/tmp# ls
phpredis-5.0.2 reids.tar.gz
root@517b9c67507a:/tmp# docker-php-source extract
root@517b9c67507a:/tmp# mv phpredis-5.0.2 /usr/src/php/ext/phpredis
#检查移过去的插件源码包是否存在
root@517b9c67507a:/tmp# ls -l /usr/src/php/ext | grep redis
drwxrwxr-x 6 root root 4096 Jul 29 15:04 phpredis
root@517b9c67507a:/tmp# docker-php-ext-install phpredis
# 检查redis 扩展是否已经安装上
root@517b9c67507a:/tmp# php -m | grep redis
redis
root@517b9c67507a:/tmp#
docker-php-ext-configure 通常与 docker-php-ext-install 搭配使用。它的作用是,在安装扩展时需要自定义配置时,由它来帮你完成。
案例:
FROM php:7.1-fpm
RUN apt-get update \
# 相关依赖必须手动安装
&& apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
# 安装扩展
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
# 如果安装的扩展需要自定义配置时
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd 下一篇:php的发展历史
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8