- 更新:2019-01-13 10:04:17
- 首发:2019-01-06 20:43:12
- 源代码
- 5333
2018年12月6日PHP官方发布了PHP 7.3.0 正式版
。恰逢最近在写一个PHP在线练习的网站,特意去翻了一下7.3.0正式版的Docker镜像。
因为官方镜像只包含了最基本的模块,像pdo_mysql
、redis
之类的模块并没有包含进去。在hub.docker.com
中找到一个相对比较合适的 PHP 7.2 版本的Dockerfile
(https://hub.docker.com/r/phpdocker/phpdocker/),却发现作者将MariaDB
、Redis Server
、Node.js
等内容给编进了Image。
我比较喜欢干净的Docker Image,一个镜像只做一个事情。像MySQL
、Redis
之类的数据库,可以单独启动相应的模块。
因此我在前人的基础上,移除了MariaDB
、Redis Server
、Node.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
暂无内容
感谢回复! Clang 在生成时沿用了 GCC 的版本号标识,我是不是可以理解为Clang 18.1.4生成时使用的就是GCC4.8,所以我后续使用gcc 9.4
gcov
就会有不兼容的问题抱歉,这块我也不太清楚,尝试寻求AI的帮助吧。
我在这个过程中遇到了各种问题- -,现在在UDC core: g_serial: couldn't find an available UDC卡住了,请问大佬有什么解决方案吗,还是说我前置的设置就错了呢,> 这个需求很特殊。是可以的,但是比较困难,需要修改驱动配置。
好思路呀!!
关于hex编辑器,网上没找到特别好用的(小白没办法),最后在vscode上扩展一搜hex,第一个安装一下就可以用vscode进行hex编译了