当前位置: 首页 > 后端技术 > PHP

dockerinstallphp-fpmservice-extension-configuration

时间:2023-03-30 05:30:56 PHP

在mac上使用brew安装php56时,由于openssl是1.1版本,导致各种错误,Google无法处理,太麻烦了,现在用docker创建一个php56-fpm服务容器,宿主机直接安装nginx。在PHPDockerHub主页创建容器#创建容器dockerrun-d\--namephp56-fpm\-p9056:9000\-v/home/wwwroot:/var/www/html--privileged=truephp:5.6-fpm注意:/var/www/html是phpdocker镜像的工作目录。-v/home/wwwroot:/var/www/html用于将宿主机的站点目录挂载到容器中。例如/home/wwwroot/siteA,在容器中访问位置为/var/www/html/siteA。nignx在转发一个php请求时,会将执行的脚本名称SCRIPT_NAME和脚本文件名称SCRIPT_FILENAME转发给fpm,然后fpm读取脚本并执行。使用fpm容器时,需要注意nginx转发的SCRIPT_FILENAME是否是fpm容器中有效的站点路径。如果nginx的root不能直接映射到fpm容器的siteroot,我们需要在phplocationroot中重新定义为fpm容器的site。这样fpm就可以正确读取脚本了。也就是说,主机上的/home/wwwroot/siteA/public/index.php应该转换为/var/www/html/siteA/public/index.php并发送到fpm容器,否则会出现Filenotfound错误会被举报。所以nginx在配置server的时候要注意如下卷路径转换:server{listen8056;....#主机站点的根目录/home/wwwroot/siteA/public;location~*(^[/]*.php)[/|$]{#容器root中站点的根目录/var/www/html/siteA/public;pass_proxy:127.0.0.1:9056;包括fastcgi.conf;但是一般情况下大家都是dockernginx+dockerphp-fpm,两个容器统一映射site目录,所以不会有这个问题。这里的nginx是直接安装在宿主机上的,导致nginx转发php请求时需要重新定义站点的根目录。登录容器#查看容器是否运行dockerps#登录容器dockerexec-itphp56-fpm/bin/bashphpdocker镜像是基于ubuntu的我们可以使用apt-get安装需要的工具,比如vim/vilrzsznet-tools之类的。#在使用apt-get安装一些工具之前,需要update更新源#否则apt-getE:Unabletolocatepackageapt-getupdateapt-getinstallviminstallphp/peclextensioninstallphpextension是php的官方扩展,比如shomp这个扩展是自带的,但是默认是不启用的。然后pdo_mysql/mysqli驱动默认是不开启的,只开启了pdo_sqlite驱动,难以置信....#查看自带的扩展cd/usr/src/php/ext&&ls-l#安装extensiondcoker-php-ext-installshmopdcoker-php-ext-installpdo_mysqldcoker-php-ext-installmysqliinstallpecl扩展容器中安装了pecl,所以直接使用pecl安装即可,注意扩展支持PHP版本。docker-php-ext-enable的主要作用是生成扩展配置文件到/usr/local/etc/php/conf.d/docker-php-ext-{extName}.ini,方便php加载扩展。#igbinaryphp5.6最高版本为2.0.8peclinstalligbinary-2.0.8docker-php-ext-enableigbinary#phpredisphp5.6最高版本为4.3.0peclinstallredis-4.3.0docker-php-ext-enableredis#swoolephp5.6最高版本为2.0.11pcelinstallswoole-2.0.11docker-php-ext-enableswoolephp/php-fpm配置/usr/local/etc为php容器的配置目录,自带php和php-fpm配置文件,配置目录结构如下:root@aa739592b579:/usr/local#treeetc/etc/|--pear.conf|--php#php配置目录||--conf.d#php扩展配置||||--docker-php-ext-shmop.ini||--php.ini#cp的php.ini-development/production||--php.ini开发||--php.ini-production|--php-fpm.conf#php-fpm的配置自带php-fpm.d的主要介绍|--php-fpm.conf.default#php的主体-fpm配置与php-fpm.d/www.conf一致|--php-fpm.d#php-fpm的扩展配置|--docker.conf|--www.conf#php-fpm配置bodymodemax/minchildren都在这里|--zz-docker.conf你可以把宿主机的配置目录映射到容器的/usr/local/etc,但是注意宿主机上的配置目录一定要和已有的容器保持一致,或者直接在容器中编辑配置文件。按照docker的理念,我们应该在宿主机维护一个配置文件映射到容器的配置目录,这样才能最大限度的发挥docker容器的复用性。将宿主机的php配置文件映射到容器-v/opt/docker/conf/php/php.ini:/usr/local/etc/php/php.ini-v/opt/docker/conf/php/php-fpm.ini:/usr/local/etc/php-fpm.d/www/conf常见问题1、Filenotfoundnginx指定的站点根目录不能直接映射到fpm容器。在location中重新指定fpm容器的站点根目录。2.apt-getE:Unabletolocatepackage执行apt-getupdate刷新源。3、容器相关约定工作目录:/var/www/html建议将宿主机站点目录映射到该目录配置目录:/usr/local/etc注意配置目录结构PHP扩展目录:/usr/local/php/ext可以查看php自带的扩展包。用docker-php-ext-install安装更方便