基于Docker版的Centos镜像搭建PHP环境
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/157/ ]
介绍一下我的开发环境,window系统装virtualbox虚拟机,虚拟机装的系统和生产环境都是Centos(圣斗士?),经典的lnmp环境,再就是添加了一些依赖的PHP拓展.当前使用的PHP版本为5.5,如果需要切换到PHP7.3版本,怎么办?
写在前面,之所以写这篇博客,一是做个记录便于自己查阅,二来还能帮助到遇上相同问题的同学。
本文摘要:我遇上什么问题,为什么用Docker,以及怎么做。
问题:需要切换PHP版本测试代码兼容性
介绍一下我的开发环境,window系统装virtualbox虚拟机,虚拟机装的系统和生产环境都是Centos(圣斗士?),经典的lnmp环境,再就是添加了一些依赖的PHP拓展。当前使用的PHP版本为5.5,如果需要切换到PHP7.3版本,怎么办?
为什么用Docker
我们当然可以配置多个版本的php-fpm,然后通过Nginx转发请求到不同版本的php-fpm。
PHP5:5.mo2g.com -> Nginx -> php-fpm:9000
PHP7:7.mo2g.com -> Nginx -> php-fpm:9007
上述转发流程基本能满足需求,但需要额外的编译安装配置。当习惯yum并且通过yum就能解决的时候,我找不到让自己去编译安装的理由。
所以我选择了通过Docker来隔离环境,通过yum安装PHP和需要的PHP的拓展。
引入docker后,大概的逻辑如下
PHP5:5.mo2g.com -> Nginx -> docker-php5:9000 -> php-fpm:9000
PHP7:7.mo2g.com -> Nginx -> docker-php7:9007 -> php-fpm:9000
下边讲怎么做?
1. 官方提供alpine版的PHP7镜像才80MB。
2. Centos镜像就已经达到了202MB,在这基础上安装PHP7后,镜像增长到了357MB。
为什么不用官方镜像,还要自己搞一个这么"庞大"的镜像?
1. alpine版的PHP虽然容量上有优势,但是添加某些拓展不是很方便。例如php-memcached,还得下载源码然后编译。
2. 熟悉Centos,通过yum能解决已知的PHP拓展或者依赖相关的问题
3. 用Docker装PHP的初衷就是想测试代码从5.X升级到7.X存在的问题,暂时不想花时间引入或者解决新的问题
基于以上思考,才尝试自己写dockerfile来创建PHP7镜像。
在编写dockerfile的过程,走了很多弯路,主要卡在了nginx转发请求到docker镜像的时候,总是报502错误。如果你也遇到类似情况,或许下边能帮到你。
敲黑板,讲重点。
1. php-fpm默认监听地址: 127.0.0.1:9000
2. php-fpm默认只接受该地址请求: 127.0.0.1
所以我们需要修改配置文件/etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000 改成 listen = 9000
listen.allowed_clients = 127.0.0.1 注释掉或删掉
最后再配上我自用的dockerfile,希望能帮到你。
FROM daocloud.io/library/centos:7.6.1810 RUN rpm -i https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm --nodeps \ && rpm -i https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm \ && yum install -y php php-memcached php-fpm php-mysql php-pdo php-redis \ php-dom php-gd php-mbstring php-mcrypt --enablerepo=remi-php73 \ && yum clean all \ && mkdir /run/php-fpm \ && sed -i 's/listen = 127.0.0.1:9000/listen = 9000/g' /etc/php-fpm.d/www.conf \ && sed -i 's/listen.allowed_clients = 127.0.0.1/;listen.allowed_clients = 127.0.0.1/g' /etc/php-fpm.d/www.conf EXPOSE 9000 CMD ["/usr/sbin/php-fpm","--nodaemonize"]
上一篇:服务器迁移记录
下一篇:升级服务器环境导致博客异常
我来说两句: