当前位置: 首页 > news >正文

docker安装部署时的资源文件路径问题以及使用pecl工具简洁方便地安装php扩展

一、docker安装部署时的资源文件路径问题

    在使用docker时,会遇上这样的情况,比如用户上传的一些图片资源等文件,直接放在代码里面肯定是不合适的,而如果使用一些软链接将资源链接至其它目录下之后你可能会遇到PHP能找到目录,但是nginx找不到目录,因为在docker容器中nginx的默认www目录是/usr/share/nginx/html/,而php的默认目录是/var/www,因此就会造成在加载文件时出现其中一个应用程序才能加载到,当然这问题可以解决,而你越早知道这个问题,就可以越早避免先进行了一些部署操作然后重新来进行修改处理。

    解决方法一是统一nginx和php的默认目录名称,这里要注意必须是两个容器都存在的路径;二是可以在启动nginx和php的时候挂载一个相同名字的目录,这样这个目录即能存放上传的资源,又能让nginx访问到此目录。当然这里的前提是已经使用了软链接将资源从代码文件夹中移出。

#启动nginx的完整命令
docker run --name nginx-007-cn -d -p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf.d:/etc/nginx/conf.d \
-v /data/nginx/log:/var/log/nginx \
-v /opt/www-data/007.cn/now_version:/usr/share/nginx/html \
-v /opt/www-data/007.cn/04007_share_dir:/home/007_share_dir \
-v /opt/www-data/007.cn/04007_fix_code:/home/007_fix_code \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
nginx-007
#启动php的完整命令
docker run --name php-007-cn -d -p 9000:9000 \
-v /opt/www-data/007.cn/now_version:/var/www \
-v /data/php/php-fpm.conf:/usr/local/etc/php-fpm.conf \
-v /data/php/php-fpm.d:/usr/local/etc/php-fpm.d \
-v /data/php/php:/usr/local/etc/php \
-v /data/php/log:/var/log/php \
-v /opt/www-data/007.cn/007_share_dir:/home/007_share_dir \
-v /opt/www-data/007.cn/007_fix_code:/home/007_fix_code \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
php-04007

    另外在使用docker的时候也遇到了一点不爽的事情,比如我们加载一个镜像搭建启动了一个容器,这时如果要更新容器的启动命令,必须要重新启一个新的容器,此时如果在容器中有安装一些比如php扩展之类的东西,对不起,就都丢了,即不能动态变更启动命令!哪怕是一些没其它影响的变更,比如我增加一个挂载目录,这挺恼火。不过也不是没有解决办法,要记得在删掉不用的但有扩展更新后面又要用的容器时对其进行保存新镜像即可。另外在docker和主机之间需要文件传输时可以使用docker的复制,但没有mv剪切命令,使用如下:

#从主机复制到容器
docker cp server_path containerID:container_path
#从容器复制到主机
docker cp containerID:container_path server_path

二、使用pecl工具简洁方便地安装php扩展

        phpize是一个常用的php扩展安装方式,但通过此方式安装需要下载对应的包、phpize,configure,make,make install等,而相比于phpize方式,pecl方式安装php扩展更为简便,我们不用去寻找源码包、下载、编译、安装配置,一个命令搞定,甚至都不用手动编辑php.ini文件。PECL的全称是The PHP Extension Community Library,是一个开放的并通过PEAR(PHP Extension and Application Repository,PHP 扩展和应用仓库)打包格式来打包安装的 PHP扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对PECL模块进行下载和安装。

pecl安装及使用如下:

#ubuntu下安装pecl工具:
apt install php-dev php-pear autoconf automake libtool -y
#centos下安装pecl工具:
yum install php-dev php-pear autoconf automake libtool -y
#也可以使用php安装pecl工具
cd /usr/local/php/bin/
wget http://pear.php.net/go-pear.phar -O go-pear.php
php go-pear.php
#pecl搜索一个扩展:xdebug,
root@us12:~# pecl search xdebug
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
Retrieving data...0%
Matched packages, channel pecl.php.net:
=======================================
Package Stable/(Latest) Local
xdebug  2.8.0 (stable)        Provides functions for function traces and profiling
#列出所有的channels
root@us12:~# pecl list-channels
Registered Channels:
====================
Channel      Alias   Summary
doc.php.net  phpdocs PHP Documentation Team
pear.php.net pear    PHP Extension and Application Repository
pecl.php.net pecl    PHP Extension Community Library
__uri        __uri   Pseudo-channel for static packages
#执行提示的update操作
root@us12:~# pecl channel-update pecl.php.net
Updating channel "pecl.php.net"
Update of Channel "pecl.php.net" succeeded
#执行之后就不会再提示了
root@us12:~# pecl search xdebug
Retrieving data...0%
Matched packages, channel pecl.php.net:
=======================================
Package Stable/(Latest) Local
xdebug  2.8.0 (stable)        Provides functions for function traces and profiling
#pecl安装扩展
root@us12:~# pecl install swoole

pecl有很多命令,可以通过pecl  help查看,常用命令如下:
build                  从C的源码中构建扩展 
install                安装扩展 
uninstall              卸载扩展
download               下载扩展包 
list-all               列出全部扩展 
run-tests              运行测试
upgrade                升级扩展
upgrade-all            升级所有扩展

    安装时会提示:

WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update,

        显示pecl.php.net更新了协议,可使用命令进行更新channels。另外在启动phpP时偶尔遇到这种报错:

PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/phalcon.so' - /usr/lib/php/20160303/phalcon.so: undefined symbol: php_pdo_get_dbh_ce in Unknown on line 

        原来是在php.ini中写死的extension=phalcon.so的位置导致的。因为phalcon依赖于json扩展,在php.ini配置文件头部写上extension导致报错,解决方法可以把phalcon的加载放至最后,也可以使用目录加载。在conf.d中新建phalcon.ini文件写入extension=内容,让php根据依赖等自动加载。


http://www.mrgr.cn/news/29130.html

相关文章:

  • SQL中的时间类型:深入解析与应用
  • 吴恩达深度学习笔记(12)14
  • 【TensorRT】使用C++将yolov8 onnx转化为tensorrt格式
  • 连接实验室服务器并创建虚拟环境,从本地上传文件到linux服务器,使用requirement.txt安装环境需要的依赖的方法及下载缓慢的解决方法(Linux)
  • LeetCode【0028】找出字符串中第一个匹配项的下标
  • XXL JOB DockerCompose部署
  • 如何在自动化测试中应用装饰器、多线程优化自动化架构?
  • Python | Leetcode Python题解之第414题第三大的数
  • 精选6大高效通信与链接API助力程式开发
  • C语言 | Leetcode C语言题解之第414题第三大的数
  • 【C++语言】C/C++内存管理
  • Java ETL - Apache Beam 简介
  • 绝缘子缺陷检测数据集
  • frp内网穿透功能使用教程
  • 【H2O2|全栈】关于CSS(5)如何制作一个搜索网页的首页?
  • 【RabbitMQ】可靠性传输
  • 部分动态铜皮的孤岛无法删除。报错
  • 如何在运行时传递回调: 解锁动态事件处理
  • 电磁阀,线性电磁阀信号驱动隔离变送器
  • Java | Leetcode Java题解之第414题第三大的数
  • [强化你的LangChain工具创建技能:从基础到进阶]
  • 20240918 每日AI必读资讯
  • npm安装时候报错certificate has expired
  • 从HTML到LangChain:如何高效加载和解析HTML文件
  • 在Ubuntu 18.04上安装R的方法
  • 『功能项目』靠近Npc显示可对话标识【60】