轶哥博客

妄图改变世界的全栈程序员。

PHP 7.3正式版+常见拓展的Docker镜像

2018年12月6日PHP官方发布了PHP 7.3.0 正式版。恰逢最近在写一个PHP在线练习的网站,特意去翻了一下7.3.0正式版的Docker镜像。

因为官方镜像只包含了最基本的模块,像pdo_mysqlredis之类的模块并没有包含进去。在hub.docker.com中找到一个相对比较合适的 PHP 7.2 版本的Dockerfilehttps://hub.docker.com/r/phpdocker/phpdocker/),却发现作者将MariaDBRedis ServerNode.js等内容给编进了Image。

我比较喜欢干净的Docker Image,一个镜像只做一个事情。像MySQLRedis之类的数据库,可以单独启动相应的模块。

因此我在前人的基础上,移除了MariaDBRedis ServerNode.js并升级PHP版本到7.3.0正式版。

PHP模块(加粗部分是在官方PHP镜像的基础上添加的模块)

[PHP Modules] apcu bcmath bz2 calendar Core ctype curl date dom exif fileinfo filter ftp gd gettext gmp hash iconv intl json libxml mbstring memcached mysqli mysqlnd openssl pcre PDO pdo_mysql pdo_sqlite Phar posix readline redis Reflection session SimpleXML soap sockets sodium SPL sqlite3 ssh2 standard sysvmsg sysvsem sysvshm tokenizer xdebug xml xmlreader xmlrpc xmlwriter xsl zip zlib

[Zend Modules] Xdebug

Usage

DockerHub:

docker pull wy373226722/php:7.3

中国:

docker pull registry.cn-shenzhen.aliyuncs.com/yi-ge/php:7.3

Run

Example:

docker run -itd --name php -v /www:/www -w /www -p 9000:9000 wy373226722/php:7.3

You can run it use rancher or portainer.

Dockerfile

https://github.com/yi-ge/php/blob/master/Dockerfile

More

在生成Docker Image的时候,ssh2模块报错:

Makefile:196: recipe for target 'ssh2_fopen_wrappers.lo' failed

原因是PHP 7.3不能直接安装PECL仓库的ssh2模块。

相关的BUG信息在:https://bugs.php.net/bug.php?id=77265#1544266627

相关的修复信息:http://git.php.net/?p=pecl/networking/ssh2.git;a=commit;h=a8835aab2c15e794fce13bd927295719e384ad2d

因此只能从仓库克隆编译:

# ssh2
RUN apt-get install -y \
    libssh2-1-dev

RUN cd /tmp && git clone https://git.php.net/repository/pecl/networking/ssh2.git && cd /tmp/ssh2 \
&& phpize && ./configure && make && make install \
&& echo "extension=ssh2.so" > /usr/local/etc/php/conf.d/ext-ssh2.ini \
&& rm -rf /tmp/ssh2

这个仓库中的Dockerfile已经修复了该问题。

安装更多模块

2019年01月13日09:59:26 更新

如果已经创建了镜像,但是还希望增加模块。可以先进入容器:

docker exec -it 容器ID bash

使用docker-php-ext-install命令进行安装。

root@6b44b2984da7:/www# docker-php-ext-install --help
usage: /usr/local/bin/docker-php-ext-install [-jN] ext-name [ext-name ...]
   ie: /usr/local/bin/docker-php-ext-install gd mysqli
       /usr/local/bin/docker-php-ext-install pdo pdo_mysql
       /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop

if custom ./configure arguments are necessary, see docker-php-ext-configure

Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv imap interbase intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline recode reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zend_test zip

Some of the above modules are already compiled into PHP; please check
the output of "php -i" to see which modules are already loaded.

安装完成后重启容器即可:

docker restart 容器ID

查看是否报错:

docker logs 容器ID --tail 100
  上一篇 (创业之殇——管理)
下一篇 (树莓派挂载硬盘Shell脚本)