`
xieye
  • 浏览: 455854 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多
使用docker建立php多版本共存的环境

本人原创文章,转载请注明出处。注意,本文的开发环境是win10家庭版,使用docker-toolbox

当前日期:2019-01-12

概述
假设现在本机同时维护两个项目,一个必须使用php5.6,一个必须使用7.2,那么怎么办呢?
可以使用phpstudy进行切换。

能不能不切换,共存?

下载安装
https://github.com/xieye114/docker_multiple_php
里面有具体的安装步骤。

文件说明
docker项目的包含内容:
  • nginx
  • redis
  • mysql
  • php56
  • php72

这时可以使用docker。我把补充说明写在前面,最后是配置文件。
-- services下面的各个容器,实际生成的镜像名 = 文件夹名_服务名,例如服务php56-fpm的镜像名是 build_php56-fpm, 我把docker-composer.yml这个文件,放在build文件夹中。即,这个镜像名是自动生成的。

-- services下面的各个容器,实际生成的容器名 = 文件夹名_服务名_1,例如服务php56-fpm的容器名是 build_php56-fpm_1,这个容器名也是自动生成的。

-- build命令,指明此服务从哪个镜像生成。那个目录下有Dockerfile文件。
-- ports:主机端口:容器端口
-- links:服务名:在本容器里的别名,这个特别重要
  举例;想在php56-fpm容器里访问mysql,应该使用别名访问,即冒号右边的名称。特别是写php程序,nginx配置等等,可以把别名理解为ip,理解为host名。
-- depends_on: 容易理解,本容器依赖与哪些容器,即那些容器先启动,本容器后启动。
-- volumes:容器外目录:容器内目录,可以文件映射,也可以目录映射,还可以指定访问方式,可读写。
-- restart:当失败时怎么做,这个不重要。
-- command:当启动容器后,自动执行的命令。

域名映射
修改windows10的hosts文件
127.0.0.1 www.t1.com 127.0.0.1 www.t2.com 127.0.0.1 www.t3.com 127.0.0.1 www.t4.com 127.0.0.1 www.t5.com 192.168.99.100 www.d1.com 192.168.99.100 www.d2.com
按照如上配置,同时取消virtualbox和windowd宿主机的所有端口映射,除了22端口。
此时,可以把phpstudy和docker一起打开,根据不同的域名共同访问项目!
在windows里访问mysql,只需访问主机192.168.99.100的mysql即可。


要点
-- 因为有多版本的php,所以,定义了两个端口,但在nginx里,不需要指明不同的端口。因为已经指定了主机名。因为端口映射是为了宿主机有统一定义的不同端口。每个容器相当于每个主机,可以有自己端口哪怕同样。

以下是nginx 配置文件的部分内容
location ~ \.php { include fastcgi_params; fastcgi_pass php56-fpm:9000; fastcgi_index index.php;
location ~ \.php { include fastcgi_params; fastcgi_pass php72-fpm:9000; fastcgi_index index.php;

-- 实际使用php项目时,通常nginx的docment_root会设置在项目的下一级或下两级,不直接设置为项目目录。

-- 修改docker-composer.yml 文件,只需重启docker-compose down,再docker-compose up -d 即可。

-- 修改Dockerfile,则必须停止后,删除那个镜像,然后docker-compose build。所以尽量尝试改动 docker-composer.yml,不行的话再改Dockerfile。

-- mysql这个软件,为什么我把配置文件放在Dockerfile里,且使用COPY这个命令,很无奈,因为mysql软件对配置文件权限要求特别高,做映射好像不行,这样的话,每次修改mysql配置文件,都得重新build安装镜像。而其他几个软件,直接在windows下修改配置文件,然后重启docker-compose即可,非常便利。

-- mysql重新安装的话,需要先自行备份所有数据库,然后删除所有 data/下的文件,然后重装。不删除会导致安装失败

目录说明
本示例项目中,目录按如下方式设置:
c:\code myapp\ build\ mysql\ Dockerfile docker.cnf mysql-file.cnf nginx\ Dockerfile nginx.conf conf.d\ myapp_code1.conf myapp_code2.conf certs\ php56\ Dockerfile php.ini php-fpm.conf sources.list php72\ Dockerfile php.ini php-fpm.conf sources.list redis\ Dockerfile data\ mysql\ redis\ logs\ mysql\ nginx\ php56-fpm\ php72-fpm\ redis\ workspace\ myapp_code1\ index.php myapp_code2\ index.php docker-compose

配置文件
使用docker-composer 会更方便。这里给出一份配置做参考。
说明:此文件已放入github,可能会有更新,但此处就不更新了。
docker-composer.yml
version: '3.2' services: php56-fpm: build: ./php56/ ports: - "9000:9000" links: - mysql-db:mysql-db - redis-db:redis-db depends_on: - mysql-db - redis-db volumes: - ../../workspace:/var/www:rw - ./php56/php.ini:/usr/local/etc/php/php.ini:ro # 当前php配置文件;可以拷贝修改php-dev.ini为想要的配置 - ./php56/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ../logs/php56-fpm:/var/log/php-fpm:rw - ./php56/sources.list:/etc/apt/sources.list:rw restart: always command: php-fpm php72-fpm: build: ./php72/ ports: - "9100:9100" links: - mysql-db:mysql-db - redis-db:redis-db depends_on: - mysql-db - redis-db volumes: - ../../workspace:/var/www:rw - ./php72/php.ini:/usr/local/etc/php/php.ini:ro # 当前php配置文件;可以拷贝修改php-dev.ini为想要的配置 - ./php72/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ../logs/php72-fpm:/var/log/php-fpm:rw - ./php56/sources.list:/etc/apt/sources.list:rw restart: always command: php-fpm nginx: build: ./nginx depends_on: - php56-fpm - php72-fpm links: - php56-fpm:php56-fpm - php72-fpm:php72-fpm volumes: - ../../workspace:/var/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/certs/:/etc/nginx/certs - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;' mysql-db: build: ./mysql ports: - "3306:3306" volumes: - ../data/mysql:/var/lib/mysql:rw - ../logs/mysql:/var/lib/mysql-logs:rw environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: myapp MYSQL_USER: user MYSQL_PASSWORD: password restart: always command: "--character-set-server=utf8 --explicit_defaults_for_timestamp --innodb-flush-method=O_DSYNC --innodb-use-native-aio=0 " redis-db: build: ./redis ports: - "6379:6379" volumes: - ../data/redis:/data restart: always
0
0
分享到:
评论
相关资源推荐
  • Docker简介以及使用docker搭建lnmp的过程(多PHP版本) 一、Docker基础 Docker安装 Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker。 通过 uname -r 命令查看你当前的内核版本 通过 apt-get install docker.io 安装docker Docker常见命令 容器相关操作 docker create # 创建一个容器...
  • [教程]Ubuntu 下轻松实现 PHP 多版本共存 原文地址 随着 php-mysql 拓展在 PHP7 被砍掉以后,一些程序或者插件就不能运行在 PHP7 上,因此 PHP 多版本的需求就显得非常的有必要。  因为系列教程中 PHP 是通过软件源非编译安装的,所以实现多版本共存就非常的方便,而且还非常浪费时间,编译一个php那可是大半个小时啊!!。    教程      这里以安装 PHP7.1 和 PHP5.6
  • 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本 转载自今日头条 小编最近发现PHPWAMP竟然又更新了,激动之余向大家介绍一下新版的强大功能。 PHPWAMP是纯绿色集成环境,高版本php无需安装VC运行库,默认已经集成VC运行库!Nginx支持服务启动,自带安全守护。可同时运行多个mysql版本与php版本!站点管理默认支持模块化与fcgi模式! Windows版的PHP有Thread Safe(线程安全)和
  • phpstudy使用fcgid脚本映射实现php多版本共存 如果使用phpStudy_2016.11.03已经开启了fcgid的就不需要这步操作,没有开启需要fcgid修改httpd.conf最底部增加如下: LoadModule fcgid_module modules/mod_fcgid.so AddHandler fcgid-script .fcgi .php Include conf/extra/httpd-php-fcgid53.conf
  • Linux系统中设置多版本PHP共存配合Nginx服务器使用 主要介绍了Linux系统中设置多版本PHP共存配合Nginx服务器使用的技巧,依靠php-fpm工具来进行管理,需要的朋友可以参考下 应用环境 LNMP的环境,当前PHP版本5.3.8,遇到一个应用需求只支持PHP 5.2.x,又希望保持现有应用还是用PHP 5.3.8。也就是说需要两个版本的PHP同时存在,供nginx根据需要调用不同版本。 思路 Nginx是通过PHP-FastCG
  • phpstudy php+apache 环境PHP多版本环境配置 1,编辑httpd.conf LoadModule fcgid_module modules/mod_fcgid.so #添加映射 AddHandler fcgid-script .fcgi .php # 设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完所有请求前退出 FcgidInitialEn...
  • IIS中多个版本php共存的方法,IIS如何快速搭建PHP网站,多个php实现共存的神器! 最近在用IIS想在win2008搭建php站点,但是他妈的几个网站竟然需要不同的php版本才能运行,搞得我很郁闷,公司上一任程序员留下来的傻逼程序啊!坑我呢!!百度了很久,发现这种IIS的php多个版本共存的教程确实很多,但是照着去做就不行了,各种问题,要么权限问题,要么就503,403等各种错误,压根没像文章里面说的那么简单好吗,坑爹呢这是! 于是看看集成环境有没有现成的,找了xampp等都没有iis功能,最后看到phpstudy支持iis,但是只能切换无法实现多版本共存,很 遗憾,然后只能继续百度,
  • php多版本并存和版本切换 安装下载不同版本的PHP源码到服务器上,在编译安装时为不同的版本指定不同的路径,例如:--prefix=/usr/local/php5.6 //指定PHP5.6版本的安装路径 --prefix=/usr/local/php7.2.3 //指定PHP7.2版本的安装路径本地执行脚本指定PHP版本安装好之后,如果需要在服务器端执行PHP脚本,假设已进入脚本的路径下,为test.php使用不同版本PHP
  • Linux下部署php多版本共存 Linux下部署php多版本共存Linux下部署php多版本共存 背景说明 开始安装 phpini 配置 php-fpmconf 配置 启动 php-fpm 修改nginx配置对需要的服务配置使用php-5445 配置php-5445 的php54-fpm 开机自动启动背景说明自php7问世,身为最新版本控的我马上升级体验,但是由于服务器上还有旧程序在运行,只好部署一个php多版本共存环境。现有环境
  • wamp中php多版本共存 由于wamp中安装的apache自带了mod_fcgi所以就愉快的进行下一步吧如果没有的话就在https://www.apachelounge.com/download/里面下载安装即可在http.conf尾部添加下面这段<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi .php #php.ini的存放目录 ...
  • Apache使用fcgid模块配置多个PHP版本共存 因为涉及多个时期开发的项目维护,每个项目使用PHP版本都不同,想要在本地开发并调试就非常麻烦了,必须得想办法同时使用多个PHP版本才行于是总结了下面方法做个记录,apache 用的不多,只是本地开发测试环境用apache感觉简单方便点儿。 如果用 Nginx 来配置多个PHP版本的话应该会更简单了吧,修改下PHP的listen端口就好了。一、根据 apache 版本下载对应的 mod_fcgid
  • Apache多虚拟主机多版本PHP(5.2+5.3+5.4)共存运行配置全过程 摘要 因为某种需求,可能是因为早期的项目需要低版本的php,和目前开发所用的版本不太一致,我们需要给不同的虚拟主机配置不同版本的PHP。避免去额外配置多个Apache,等iis和apache共存的麻烦。 因为某种需求,可能是因为早期的项目需要低版本的php,和目前开发所用的版本不太一致,我们需要给不同的虚拟主机配置不同版本的PHP。避免去额外配置多个Apache,等iis和apac
  • nodejs多版本运行环境使用 如果你还不熟悉node的话,可以先去看我之前分享过的《nodejs入门级教程》及《nodejs组件篇》。 为什么需要多版本切换,由于node版本众多,特别是v8的改进较大(npm install更快),nvm可以管理及灵活切换特定版本。 下载:https://github.com/creationix/nvm nvm arch : Show if node is running in 32 ...
  • LNMP 多版本PHP同时运行 首先需要装好两个版本以上的PHP(例如:php5.6和php7两个版本)。这里假设你已安装完成。 1、配置并启动php5.6: 1.打开php5.6的安装目录 # cd /usr/local/php5/ 2.打开配置监听端口文件 # cd etc/ # vim php-fpm.conf 3.将文件中的监听端口设置为9000 listen = 127.0.0.1:9000 4.
  • Mac OSX 多php版本共存 Mas OSX php多版本共存
  • Windows多版本python共存 1. 简介        Python自从进入3.x版本后,与2.x的版本发生了许多变化,3.x对2.x也不兼容。在实际应用中,可能会2.x和3.x的版本交叉应用,因此,需要在本地安装多个版本的Python。本处介绍一种在Windows系统下安装多个不同版本的python的方法,安装后无需进行任何特殊的处理(例如将python.exe更名为python2.exe什么的)即可使用。2. 安装环境  ...
  • phpstudy多版本php共存,phpstudy无法多版本共存的方案,多个PHP同时运行 phpstudy多版本php共存,phpstudy无法多版本共存的方案,用了phpstudy很多年,最近测试需要用到多版本共存,默认phpstudy并不支持,只能切换版本,不能多个版本同时运行, 弄了好久都搞不定,在网站参照其他配置也都搞了好久也搞不定,最后只能考虑换集成环境了,然后就找到了功能也很强大的PHPWAMP8.8.8.8IN,这个软件默认了所有apache运行方式,默认就支持多个版本共存,站点很方便给力,尤其是站点管理功能和常用工具很给力
  • centos7 配置lnmp环境 阿里云 php多版本安装 阿里云centos7系统配置lnmp环境,包括多个php版本,最新版本数据库,包括nginx配置等。
  • docker搭建独立的php版本 手机docker-compose搭建php遇到的坑1.使用docker搭建单独的php容器 需要在nginx的配置文件里指定容器的ip例如: location ~ \.php(.*)$ { fastcgi_pass 172.18.0.1:9000; //指定容器的ip fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php...
  • centos php 多版本共存切换 首先: 1.停止当前版本PHP并分别启动脚本     service php-fpm stop #需要停止php     mv /etc/init.d/php-fpm{,_bk} #备份当前PHP版本的启动脚本 2.例如: php5.5安装路径是/usr/local/php, 那么安装其它版本的PHP 5.6可以安装到   /usr/local/php5.6 7.0可以安装到   /usr/lo...
Global site tag (gtag.js) - Google Analytics