欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  Docker php安装PHP扩展步骤以及安装常见的扩展合集

Docker 本站 543 0评论

本文主要是演示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 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


docker php扩展安装合集


1.先进入myphp容器,看一下php目前安装了哪些扩展:

$ docker exec -it php bash

root@php:/# php -m

[PHP Modules]

Core 、ctype、curl、date、dom、fileinfo、filter、ftp、hash、iconv、json、libxml、mbstring、mysqli、mysqlnd、openssl、pcre、PDO、pdo_mysql、pdo_sqlite、Phar、posix、readline、Reflection、session、SimpleXML、sodium、SPL、sqlite3、standard、tokenizer、xml、xmlreader、xmlwriter、zip、zlib


2.其他扩展的安装:


2.1.先更新一下系统

root@php:/# apt-get update


2.2进入  /usr/local/bin 看一下安装和配置工具

root@myphp:/# cd /usr/local/bin

root@myphp:/usr/local/bin# ls

docker-php-entrypoint  docker-php-ext-enable   docker-php-source  pear     pecl  phar.phar  php-config  phpize

docker-php-ext-configure  docker-php-ext-install  freetype-config    peardev  phar  php        phpdbg


2.3 官方的各个扩展的安装

bcmath, calendar, exif, gettext, sockets, dba,mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm 

root@myphp:docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm


2.4其他的安装


bz2 扩展的安装, 读写 bzip2(.bz2)压缩文件

$ apt-get update && \

apt-get install -y --no-install-recommends libbz2-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) bz2


enchant 扩展的安装, 拼写检查库

$ apt-get update && \

apt-get install -y --no-install-recommends libenchant-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) enchant


gd 扩展的安装. 图像处理

$ apt-get update && \

apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \

docker-php-ext-install -j$(nproc) gd

方法2:

#容器中
apt update  #更新软件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库
docker-php-source extract #解压源码
cd /usr/src/php/ext/gd  #gd源码文件夹
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2   #准备编译
docker-php-ext-install gd   #编译安装
php -m | grep gd
exit
# 重启php容器


gmp 扩展的安装, GMP

$ apt-get update && \

apt-get install -y --no-install-recommends libgmp-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) gmp


soap wddx xmlrpc tidy xsl 扩展的安装

$ apt-get update && \

apt-get install -y --no-install-recommends libxml2-dev libtidy-dev libxslt1-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl


zip 扩展的安装

$ apt-get update && \

apt-get install -y --no-install-recommends libzip-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) zip


snmp 扩展的安装

$ apt-get update && \

apt-get install -y --no-install-recommends libsnmp-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) snmp


pgsql, pdo_pgsql 扩展的安装

$ apt-get update && \

apt-get install -y --no-install-recommends libpq-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) pgsql pdo_pgsql


pspell 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends libpspell-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) pspell


recode 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends librecode-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) recode


pdo_firebird 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends firebird-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) pdo_firebird


pdo_dblib 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends freetds-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-configure pdo_dblib --with-libdir=lib/x86_64-linux-gnu && \

docker-php-ext-install -j$(nproc) pdo_dblib


ldap 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends libldap2-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu && \

docker-php-ext-install -j$(nproc) ldap


imap 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends libc-client-dev libkrb5-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \

docker-php-ext-install -j$(nproc) imap


interbase 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends firebird-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) interbase


intl 扩展的安装 

$ apt-get update && \

apt-get install -y --no-install-recommends libicu-dev && \

rm -r /var/lib/apt/lists/* && \

docker-php-ext-install -j$(nproc) intl


mcrypt 扩展的安装 

$ apt-get update && \ 

apt-get install -y --no-install-recommends libmcrypt-dev && \

rm -r /var/lib/apt/lists/* && \

pecl install mcrypt-1.0.1 && \

docker-php-ext-enable mcrypt


imagick 扩展的安装

$ export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" && \

apt-get update && \

apt-get install -y --no-install-recommends libmagickwand-dev && \

rm -rf /var/lib/apt/lists/* && \

pecl install imagick-3.4.3 && \

docker-php-ext-enable imagick


memcached 扩展的安装 

$ apt-get update && \ 

apt-get install -y --no-install-recommends zlib1g-dev libmemcached-dev && \

rm -r /var/lib/apt/lists/* && \

pecl install memcached && \

docker-php-ext-enable memcached


redis 扩展的安装

$ pecl install redis-4.0.1 && docker-php-ext-enable redis


opcache 扩展的安装 

$ docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache


转载请注明: ITTXX.CN--分享互联网 » Docker php安装PHP扩展步骤以及安装常见的扩展合集

最后更新:2020-04-30 18:37:28

赞 (3) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽