Dockerphp安装扩展步骤详解
前⾔
此篇,主要是演⽰docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是⽤来⼲嘛的,它们在PHP容器中都做了哪些事情。
很多⼈很不理解在Dockerfile中安装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
-rw-r--r-- 1 root root 801 Jun 28 03:23 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
-rw-r--r-- 1 root root 801 Jun 28 03:23 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
-rw-r--r-- 1 root root 801 Jun 28 03:23 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
怎么安装phpopenssl
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/ codeload.github/phpredis//5.0.2
root@803cbcf702a4:/# cd /tmp
root@517b9c67507a:/tmp# tar -xzf
root@517b9c67507a:/tmp# ls
phpredis-5.0.2
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论