前言:

  最近公司有两个站点,分别是两种系统进行二次开发,基于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方案。的更多相关文章

  1. win8.1 “服务器运行失败”的解决方法

    平台:win8.1 SP1 问题:安装QQ安全管家又卸载后出现了奇怪的问题,1.在桌面点右键→个性化时,提示“服务器运行失败”.2.右键点击“这台电脑”,选择“属性”时没有反应.3.开始屏幕里随便选择 ...

  2. 解决Firefox已阻止运行早期版本Adobe Flash

      解决Firefox已阻止运行早期版本Adobe Flash     类别    [随笔分类]web   解决Firefox已阻止运行早期版本Adobe Flash   最近火狐浏览器不知抽什么风, ...

  3. Docker 技术系列之安装多版本Mysql5.6和Mysql5.7

    大家好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关.所以这个教程对于在linux系统还是macOS都是通用的,不用担心. 上一篇,我们安装好对应的Docker之后,感受到 ...

  4. Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台

    转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章操作系统信息 Linux:ubu ...

  5. Docker学习笔记之运行和管理容器

    0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...

  6. Docker——MacOS上安装运行docker

    近几年来,Docker越来越流行,使用场景也越来越广泛.为了能尽快跟上时代步伐.学习并应用到实际工作中,我也开始了Docker之旅. Docker版本 Docker共有两种版本: 社区版(Commun ...

  7. 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应 如果pytorch的编译时 ...

  8. 使用docker的kms服务器激活office2016专业增强版

    我安装了office2016专业增强版,使用自己搭建的kms激活服务器无法激活,回来使用了一下脚本: 感谢,rainfarm的博主.博客地址:http://blog.sina.com.cn/s/blo ...

  9. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

随机推荐

  1. # li鼠标移入移出,点击,变背景色,变checkbox选中状态

    移入移出背景色改变和点击背景色改变,两者是否相互覆盖? 若移出背景色恢复,影响点击事件的背景色改变,会产生效果为: 点击时,背景色改变,并且checkbox选中 鼠标移开后,checkbox仍选中,但 ...

  2. SQL语句:SQLwhile(0=0)与while @@fetch_status=0.

    第一句是SQL循环用的,这个条件下,会读取所有的记录,因为会一直循环; 第二句是游标里的,@@fetch_status=0 等于0时,说明游标是成功的.

  3. Sql Server Profiler跟踪死锁

    Sql Server Profiler一个很重要的应用场景就是监视分析死锁. 下面通过一个例子来学习Profiler是如何监视死锁的. 1. 创建测试数据模拟死锁, 创建表Table_A和Table_ ...

  4. PYTHON:HTTP头设置工具(以附件名为例)

    import oss2 # 用户授权 auth = oss2.Auth('accessId', 'accessKey')# oss bucket bucket = oss2.Bucket(auth, ...

  5. win7 服务详解-系统优化

    Adaptive Brightness监视氛围光传感器,以检测氛围光的变化并调节显示器的亮度.如果此服务停止或被禁用,显示器亮度将不根据照明条件进行调节.该服务的默认运行方式是手动,如果你没有使用触摸 ...

  6. Cocos移植到Android-使用Eclipse交叉编译打包

    如果对命令行望而生畏,我们可以借助于安装有ADT插件的Eclipse工具实现交叉编译.使用Eclipse进行交叉编译,首先需要将要编译的工程导入到Eclipse的Workspace中,Workspac ...

  7. iOS app应用界面加载卡顿的问题

    刚发布版本,忽然发现加载界面需要3-5秒延迟,那么问题来了. 首先,发现问题: 1.看代码,基于之前版本更新都没出问题,还是比较确信不是代码中的bug,以防万一,还是仔细看了下关于界面跳转部分的代码, ...

  8. UVALive 3027(并查集)

    题意:某公司的各企业群要建立联系,I i j 表示企业i与企业j建立联系,并且以企业j为中心(并查集中的父亲)(企业j为暂时的中心企业),E i 表示查询企业 i 距离此时的中心企业的距离.各企业间的 ...

  9. VS2010

    1,vc++目录——>包含目录: Visual Studio will search for the include files referred to in your source code ...

  10. 1.ssh访问限制

    1.要求:限制my133.t.org(172.168.1.0/24)这个攻击域的主机访. 2.操作:vim /etc/host.deny 忘记可^tab ,在最末尾添加行:sshd:  172.168 ...