Docker中PHP安装扩展(二)

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

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

第一种方式

这里说第二种方式,也是安装redis扩展演示

命令介绍
  • docker-php-source
  • docker-php-ext-install
  • docker-php-ext-enable
  • docker-php-ext-configure

查看并进入PHP容器

docker ps
docker exec -it 容器id或容器名 /bin/bash

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目录。
# 此时,并没有php目录
root@474d87735499:/usr/src# pwd
/usr/src
root@474d87735499:/usr/src# ls
php.tar.xz  php.tar.xz.asc

# 执行命令之后再次查看多了php文件夹,里面还有一些文件
root@474d87735499:/usr/src# docker-php-source extract
root@474d87735499:/usr/src# ls
php  php.tar.xz  php.tar.xz.asc

# 执行命令删除,查看已经没有php文件夹了
root@474d87735499:/usr/src# docker-php-source delete
root@474d87735499:/usr/src# ls
php.tar.xz  php.tar.xz.asc

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 对应的配置文件即可。
# 把刚才删掉的php文件夹再创建下
root@474d87735499:/usr/src# docker-php-source extract
root@474d87735499:/usr/src# ls
php  php.tar.xz  php.tar.xz.asc

# 默认是没有php扩展的,php -m查看一下
root@474d87735499:/usr/src# php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
...

# 先下载redis扩展,放到目录/tmp
root@474d87735499:/usr/src# cd /tmp
root@474d87735499:/tmp# curl -L -o /tmp/reids.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  237k    0  237k    0     0  40132      0 --:--:--  0:00:06 --:--:-- 68541
root@474d87735499:/tmp# ls
pear  reids.tar.gz
root@474d87735499:/tmp#

# 解压
root@474d87735499:/tmp# tar -xzf reids.tar.gz
root@474d87735499:/tmp# ls
pear  phpredis-5.0.2  reids.tar.gz

# 移动redis扩展到源码目录,查看成功没有
root@474d87735499:/tmp# mv phpredis-5.0.2 /usr/src/php/ext/phpredis
root@474d87735499:/tmp# ls /usr/src/php/ext | grep redis
phpredis

# 通过docker-php-ext-install安装redis扩展
root@474d87735499:/tmp# docker-php-ext-install phpredis
Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731
...

# 检查redis 扩展已安装上,并且是启动的
root@474d87735499:/tmp# php -m | grep redis
redis

# 删除扩展,只需要把对应配置文件删除
root@474d87735499:/tmp# ls /usr/local/etc/php/conf.d
docker-php-ext-opcache.ini  docker-php-ext-redis.ini  docker-php-ext-sodium.ini
root@474d87735499:/tmp# rm -rf /usr/local/etc/php/conf.d/docker-php-ext-redis.ini

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

# 查看现有可以启动的扩展
root@474d87735499:/tmp# ls /usr/local/lib/php/extensions/no-debug-non-zts-20180731/
opcache.so  redis.so  sodium.so

# 查看redis扩展是否已启动
root@474d87735499:/tmp# php -m | grep redis
redis

# 已经启动了,这里不演示了,如果有未启动的,用这个命令就可以启动了,比如启动redis
root@474d87735499:/tmp# docker-php-ext-enable redis

docker-php-ext-configure
docker-php-ext-configure 一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,当你安装扩展的时候,需要自定义配置时,就可以使用它来帮你做到。

DockerFile案例

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-fpm需要重启容器才能生效

docker restart php容器id或名称
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值