使用Docker解决同一服务器运行不同版本PHP方案。
前言:
最近公司有两个站点,分别是两种系统进行二次开发,基于LNMP架构的网站。一般想PHP这种非编译型语言想要对外出售源码都会进行加密,加密方法有很多种,大部分都是使用Zend Guard来进行加密。这就会对Zend的版本有所要求。现在在生产环境中最经常遇到的应该就是php5.2与php5.3的加密了。php5.2采用的zend optimizer,而 php5.3采用的Zend Grard来加密源代码。如果你不想或者嫌麻烦去安装低版本扩展的话,这一篇文章可以将两个不同版本的PHP加密搭建在一个服务器上。
不适合的情况:
由于Docker是基于linux的namespace和cgroup,官方声称内核最好是在3.8以上。如有需要自行升级内核。
为保证生产环境的稳定,不建议采用Windows下使用docker。(尽管windows下已经有了windows docker)
环境:
OS: Centos 7 64bit
php: php5.3
架构: lnmpa
准备工作:
当前服务器上已经安装好了php5.3并且能够正常运行。
selinux与LXC有冲突,所以需要禁用selinux。
(若版本在Centos 7以下需要配置下载源,例如 http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm 或 http://www.hop5.in/yum/el6/hop5.repo)
安装Docker:
为了节省时间,直接使用二进制包进行安装Docker
[~]#yum install docker-io 或 yum install docker
[~]#chkconfig docker on #docker开机启动
[~]#service docker start #启动docker
[~]#service docker status #验证docker状态
docker容器的准备工作:
pull一个Centos docker镜像。我使用的daocloud的镜像,国内速度很快。使用docker.io速度非常慢。
[~]#docker pull daocloud.io/library/centos:latest
拉取完成后 docker imgaes 可以查看当前镜像列表。
[~]#docker images
创建容器:为了使我们的镜像具有可交互,加上-it参数
[~]#docker create -it -name="php52" daocloud.io/centos:latest /bin/bash
运行容器:
[~]#docker start php52
查看当前容器状态:
[~]#docker ps -a
这样,一个用docker虚拟化的一个linux主机就搭建完成了。docker不同于虚拟机,它依赖于宿主的硬件资源而且并非像虚拟机那样消耗大量硬件资源。docker详细介绍和使用方案请参考:http://dockerpool.com/static/books/docker_practice/index.html
安装低版本php:
确保php52这个容器正常运行的情况下,使用
[~]#docker exec -it php52 /bin/bash
来进入该容器与之交互。当然也可以使用docker attach php52来进入容器,不过这样当前exit的时候,这个容器就会退出了哦,请参考另一篇博文使用小技巧。
这样,一路顺畅的情况下,就像一台新的主机一样去配置php52版本吧,这里不做阐述。
Nginx的反向代理:
你肯定会想 域名指向的是主机IP,虽然虚拟出来一个Centos和低版本php,如何访问呢。可以使用Nginx最常用的反向代理来解决。
编辑/usr/loca/nginx/conf/vhost/{domain}.conf 路径根据具体的编辑参数与配置文件决定。
[~]#ip addr
查看docker的局域网IP地址
加入Nginx反向代理配置 ,节省篇幅,只贴上关键代码:
...
location ~ [^/]\.php(/|$){
proxy_pass http://{docker ip}:80;
include proxy.conf;
}
...
Nginx反向代理请参考:http://www.nowamagic.net/academy/detail/1226280
结尾:
到此,只需要重启nginx就能把当前站点php文件的解析代理到docker 容器中的环境中php环境下。这样就完成了在一台主机上搭建两个版本php的解决方法。
使用Docker解决同一服务器运行不同版本PHP方案。的更多相关文章
- win8.1 “服务器运行失败”的解决方法
平台:win8.1 SP1 问题:安装QQ安全管家又卸载后出现了奇怪的问题,1.在桌面点右键→个性化时,提示“服务器运行失败”.2.右键点击“这台电脑”,选择“属性”时没有反应.3.开始屏幕里随便选择 ...
- 解决Firefox已阻止运行早期版本Adobe Flash
解决Firefox已阻止运行早期版本Adobe Flash 类别 [随笔分类]web 解决Firefox已阻止运行早期版本Adobe Flash 最近火狐浏览器不知抽什么风, ...
- Docker 技术系列之安装多版本Mysql5.6和Mysql5.7
大家好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关.所以这个教程对于在linux系统还是macOS都是通用的,不用担心. 上一篇,我们安装好对应的Docker之后,感受到 ...
- Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章操作系统信息 Linux:ubu ...
- Docker学习笔记之运行和管理容器
0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...
- Docker——MacOS上安装运行docker
近几年来,Docker越来越流行,使用场景也越来越广泛.为了能尽快跟上时代步伐.学习并应用到实际工作中,我也开始了Docker之旅. Docker版本 Docker共有两种版本: 社区版(Commun ...
- 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应 如果pytorch的编译时 ...
- 使用docker的kms服务器激活office2016专业增强版
我安装了office2016专业增强版,使用自己搭建的kms激活服务器无法激活,回来使用了一下脚本: 感谢,rainfarm的博主.博客地址:http://blog.sina.com.cn/s/blo ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
随机推荐
- 关于servlet与jsp&java类传值问题
为了实现单击左侧导航栏,动态改变右侧(一个jsp文件)的内容,需要改变变量var的值,进而实现改变default部分内容的目的(自己想的方法,因为实在是layman.应该有简便快捷的方法,可我不知道. ...
- 使用C#动态生成Word文档/Excel文档的程序测试通过后,部署到IIS服务器上,不能正常使用的问题解决方案
使用C#动态生成Word文档/Excel文档的程序功能调试.测试通过后,部署到服务器上,不能正常使用的问题解决方案: 原因: 可能asp.net程序或iis访问excel组件时权限不够(Ps:Syst ...
- Java - 正则表达式常用操作
验证 简单验证 String regex = "\\d{4}-\\d{2}-\\d{2}"; String input = "2016-01-01"; asse ...
- HttpClient(4.3.5) - HTTP Request & HTTP Response
HTTP Request All HTTP requests have a request line consisting a method name, a request URI and an HT ...
- EF4.1之Code first 的几种连接数据库的方式
通过代码 进行连接和创建数据库的方法主要分为两种: 1.使用用连接字符串(在配置文件里面): 连接字符串: <add name="DbEntities" connection ...
- Forms身份认证
引言 大家都知道Http是无状态的协议,所以访问一个url,你并不能知道用户在之前是否已经登陆过.但是许多业务上的逻辑又离不开user的信息,这个时候就可以借助身份认证来记录当前user的登录状态.这 ...
- unity3d遍历出Cube里面所有子对象
cube目录下有n个cube,可不可以一下子遍历出所有的对象,而不用一个一个的find?find(“Cube1”) 1.foreach(Transform ts in cube) 2.cub ...
- PSP个人软件开发工具需求分析文档
第一部分:前景与范围 1.业务需求 1.1 背景 在目前的软件项目开发过程中,进度计划总是非常不准确,经常出现延期,而且大多数都无法给出一个相对比较准确的延迟时间.即使使用用例包.用例的方式组织需求, ...
- Query 快速入门教程
Query 快速入门教程 http://www.365mini.com/page/jquery-quickstart.htm#what_is_jquery jquery常用方法及使用示例汇总 http ...
- 创建featureclass,为它赋别名,并移动到数据集下
if (pOutFtrClass == null) { //continue; //创建featureclass //得到规范的字段集 IFields pFields = pFeatureClass. ...