轶哥

📚 Having fun with AI Agent. Always learning.

    PHP 7.3正式版+常见拓展的Docker镜像
    •   更新:2019-01-13 10:04:17
    •   首发:2019-01-06 20:43:12
    •   源代码
    •   5670

    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脚本)  

    评论回复提醒