当前位置: 首页 > 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根据依赖等自动加载。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在 Mac 上安装双系统会影响性能吗,安装双系统会清除数据吗?
  • 【Python】谷歌浏览器总是自动更新,使用selenium跟chromedriver版本不匹配怎么办?
  • 【基于C++的产品入库管理系统】
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于模型-数据混合驱动的区域能源互联网韧性在线评估》
  • chattr:修改文件的特殊属性
  • 【BFS专题】— 解决拓扑排序问题
  • 合宙Air201模组LuatOS:PWRKEY控制,一键解决解决关机难问题
  • 数据权限的设计与实现系列9——前端筛选器组件Everright-filter集成框架开发2
  • TCP套接字【网络】
  • zabbix之钉钉告警
  • 【Qnx】使用ClockCycles完成计时功能
  • 零拷贝技术在现代编程语言和中间件中的应用
  • ROS 编程入门的介绍
  • LabVIEW 可以同时支持脚本编程和图形编程
  • 细胞分裂检测系统源码分享
  • Android 控件背景颜色处理
  • LeetCode18.四数之和 JavaScript
  • Redis字符串类型内部编码剖析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 闭包--闭包之tab栏切换(四)
  • 程序员最讨厌的9句话,你可有补充?
  • 第2章 网络文档
  • 对象管理器(defineProperty)学习笔记
  • 翻译:Hystrix - How To Use
  • 分享一份非常强势的Android面试题
  • 力扣(LeetCode)21
  • 新书推荐|Windows黑客编程技术详解
  • 优化 Vue 项目编译文件大小
  • 7行Python代码的人脸识别
  • hi-nginx-1.3.4编译安装
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #pragam once 和 #ifndef 预编译头
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (分类)KNN算法- 参数调优
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (生成器)yield与(迭代器)generator
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)SpringBoot3---尚硅谷总结
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***通过什么方式***网吧
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .gitattributes 文件
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core 2.1路线图
  • .NET Core Web APi类库如何内嵌运行?
  • .Net Core 中间件验签
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .netcore 获取appsettings