Docker php安装扩展步骤详解

前言

此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。
很多人很不理解在Dockerfile中安装PHP扩展的时候总是出现这几个命令,本篇就就是为你揭开这些命令的神秘面纱而准备的,所有案例都是本人自己运行过的。

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

通过pecl方式安装
通过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 -jKaTeX parse error: Undefined control sequence: \ at position 22: …) iconv mcrypt \̲ ̲ # 如果安装的扩展需要…(nproc) gd

docker php安装扩展相关推荐

  1. Docker php安装扩展步骤详解

    前言 此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来 ...

  2. docker php安装gd扩展_docker php 容器安装GD库

    用thinkphp 5 Image库,创建缩略图报错:Call to undefined function imagecreatefromjpeg(),度娘一下发现是php 环境没有配置GD库扩展,因 ...

  3. docker php安装gd扩展_Docker php安装扩展步骤

    演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PH ...

  4. docker下安装php扩展swoole

    docker下安装php拓展swoole docker下安装php拓展,docker下可用的命令少,安装起来可没那么方便了,我这里用的ubuntu系统,安装了集成环境dnmp 若是一开始知道要用到sw ...

  5. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  6. Docker的安装和使用及其Docker容器间通信,云计算技术与应用实验报告

    实验环境:Windows操作系统,阿里云资源,Docker 实验内容和要求:安装Docker并进行相关实验,熟悉Docker的相关操作.实验包括Docker的安装.镜像和容器的使用.容器的连接.容器间 ...

  7. linux安装教程 ce,docker CE安装教程

    docker CE安装教程 2018-11-09 10:28 | coding云 | 31451次阅读 | 本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安 ...

  8. docker php 安装swoole,swoole(1)使用docker安装swoole环境

    1.下载镜像 pull php 镜像 docker pull php:7.3-alpine3.8 创建容器 docker run -it --name test php:7.3-alpine3.8 s ...

  9. docker的安装与安装mysql(mac,centos为例)

    一.mac安装docker 1.去这个网站下载安装https://www.docker.com/get-started 2.运行docker 运行开启docker  docker run -dp 80 ...

最新文章

  1. C#进阶系列——动态Lamada
  2. 中国厂商导致美国断网很稀奇?咱们早就被坑过了
  3. Python脚本--Apache配置文件
  4. 5毛钱搞一个2.4GHz射频信号探测器
  5. SSM集成Mybatis和Druid
  6. java程序员期望薪资_11月程序员平均薪资达14327元,薪资最高的居然不是JAVA?
  7. matlab2c使用c++实现matlab函数系列教程-tanh函数
  8. arm中断保护和恢复_ARM中断处理过程
  9. E-BERT: 电商领域语言模型优化实践
  10. 关于4442卡的读密码问题
  11. 引入阿里iconfont图标方法以及注意事项
  12. 矩阵迹的常用性质,导数,以及推导过程
  13. 国内外常见DNS汇总 (更新:201904)
  14. T430系统盘迁移到SSD上的经验
  15. 江在川上曰:webpack前端工程化
  16. 支付宝又要刷屏了,红包活动开始了
  17. ubuntu 17.10安装64位Chrome浏览器
  18. VTK实现电影级渲染效果(CVR)
  19. Java map集合实现上一条(篇),下一条(篇)新闻翻篇功能
  20. Bootstrap浏览器兼容性

热门文章

  1. Android实现计步器功能,适配Android10,隔天步数清零,查看历史运动纪录_附源码
  2. iOS开发 常用的第三方框架
  3. C++数字华容道,免费复制
  4. 电脑开不了机计算机无法启动,电脑开不了机?教您电脑开不了机怎么办
  5. 搭建数字化发展引擎,驱动商业革新
  6. python之浮点数运算
  7. C语言中rand函数的运用以及说明
  8. 四元数解算姿态角解析
  9. FFmpeg入门详解之82:FFmpeg转码器Java版之ava编码
  10. Python获取FFMPEG转码进度