docker安装php拓展

此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。

Docker 中的PHP容器安装扩展的方式有

  1. 通过pecl方式安装
  2. 通过php 容器中自带的几个特殊命令来安装,这些特殊命令可以在Dockerfile中的RUN命令中进行使用。

这里,我们主要讨论的是第二种方案,如何通过PHP容器中的几个特殊命令来安装PHP扩展

PHP中安装扩展有几个特殊的命令

  • docker-php-source
  • docker-php-ext-install
  • docker-php-ext-enable
  • docker-php-ext-configure

演示这三个命令的作用

都是在PHP容器中进行演示的,PHP容器启动太简单,不作过多介绍

docker-php-source

此命令,实际上就是在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#

docker-php-ext-enable

这个命令,就是用来启动 PHP扩展 的。我们使用pecl安装PHP扩展的时候,默认是没有启动这个扩展的,如果想要使用这个扩展必须要在php.ini这个配置文件中去配置一下才能使用这个PHP扩展。而 docker-php-ext-enable 这个命令则是自动给我们来启动PHP扩展的,不需要你去php.ini这个配置文件中去配置。
案例

# 查看现有可以启动的扩展
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#

docker-php-ext-install

这个命令,是用来安装并启动PHP扩展的。
命令格式:
docker-php-ext-install “源码包目录名”

注意点:

  • “源码包“需要放在 /usr/src/php/ext 下
  • 默认情况下,PHP容器没有 /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-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安装并配置 GD 扩展 #### 安装前准备 为了成功安装和启用 PHP 的 GD 库扩展,需要先确认服务器环境已准备好必要的依赖项。通常情况下,GD 库的安装涉及图形处理功能的支持,因此可能需要额外安装一些图像库及其开发头文件。 #### 方法一:通过修改 `php.ini` 文件手动启用 GD 扩展 对于 Windows 平台上的 PHP 环境,可以通过编辑 `php.ini` 配置文件实现 GD 扩展的手动启用。具体操作如下: - 找到 PHP 的配置文件路径下的 `php.ini` 文件。 - 查找其中被注释掉的一行 `;extension=php_gd2.dll`。 - 将该行前面的分号移除,使其变为 `extension=php_gd2.dll`[^2]。 - 保存更改后的 `php.ini` 文件,并重启 Web 服务器(如 Apache 或 Nginx),使配置生效。 #### 方法二:基于 Linux/Unix 系统的 GD 扩展安装流程 针对类 Unix 操作系统的 PHP 环境,GD 扩展的安装过程稍显复杂,但可以遵循以下通用步骤: 1. **安装必要依赖** 在大多数 Linux 发行版上,GD 库依赖于其他图形处理工具包,比如 libpng 和 freetype。这些依赖关系可以在运行以下命令时解决: ```bash sudo apt-get update && sudo apt-get install -y \ libjpeg-dev \ libfreetype6-dev \ libwebp-dev \ libpng-dev ``` 2. **编译安装 GD 扩展** 使用 PECL 工具或者源码方式安装 GD 扩展。以下是两种常见方法之一——PECL 方式: ```bash pecl install gd ``` 3. **更新 php.ini 自动加载 GD** 成功安装后,需确保 GD 被正确加载至 PHP 环境中。这一步可通过向 `php.ini` 添加一行来完成: ```ini extension=gd.so ``` 此外,也可以利用 Docker 提供的便捷脚本简化此过程: ```bash docker-php-ext-enable gd ``` 上述命令会自动将 GD 加入到当前活动的 PHP 配置中,无需手工干预 `php.ini` 文件的内容[^3]。 4. **验证安装状态** 最终,执行下面这条指令检查 GD 是否已被正常集成进 PHP: ```bash php -m | grep gd ``` 如果返回结果包含 “gd”,则表明安装顺利完成。 #### 方法三:综合考虑自动化部署场景 当面对容器化应用(例如使用 Docker 构建镜像)时,推荐采用官方维护者提供的最佳实践方案。例如,在构建自定义 PHP 映像期间加入类似这样的层叠命令序列: ```dockerfile RUN apt-get update && apt-get install -y --no-install-recommends \ libjpeg-dev \ libfreetype6-dev \ && docker-php-ext-configure gd --with-jpeg=/usr/include/ --with-freetype=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-enable gd ``` 上述片段不仅完成了基础软件栈装配工作,还兼顾性能优化以及长期可维护性的需求。 --- ### 总结 无论是在本地开发环境中还是生产级别服务器集群里,只要按照既定指南逐步实施,就能顺利达成目标即让 PHP 支持完整的 GD 图形绘制能力。值得注意的是不同版本间可能存在细微差异,请始终参照对应发行说明文档获取最精确指导信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值