`
xieye
  • 浏览: 822774 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用docker建立php多版本共存的环境(1)

阅读更多
使用docker建立php多版本共存的环境

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

当前日期:2019-01-12

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

能不能不切换,共存?

说明:docker-toolbox应该创建好后新建虚拟机
方法
https://www.ibm.com/developerworks/community/blogs/jfp/entry/Using_Docker_Machine_On_Windows?lang=en

docker-machine create -d virtualbox --virtualbox-memory=4096 --virtualbox-cpu-count=2 --virtualbox-disk-size=50000 dev

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

2019 01 16 修改,添加了beanstalkd 队列的镜像 Dockerfile,方便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安装PHP5.6版本

    docker安装PHP5.6镜像文件,mac下成功运行起来

    使用Docker建立Mysql集群

    使用Docker建立Mysql集群使用Docker建立Mysql集群使用Docker建立Mysql集群使用Docker建立Mysql集群

    使用docker构建golang线上部署环境的步骤详解

    Docker用于开发 Docker不仅用于部署,它还可以用于开发。 1、为什么要在开发中使用Docker 主要有以下几个原因。...5)可以使用同一编程语言的多个版本 可以使用同一编程语言(如python, python, ruby, ruby,

    docker 快速搭建php环境 docker包,一键启动开发环境

    docker 快速搭建php环境 docker包,一键启动开发环境,docker 快速搭建php环境 docker包,一键启动开发环境

    Docker windows版本

    要先用git里面的sh,就可以正常使用linux模拟环境,在用...Docker windows版本Docker windows版本Docker windows版本Docker windows版本Docker windows版本Docker windows版本Docker windows版本Docker windows版本

    docker下一键自动部署PHP环境

    docker下 搭建 PHP+mysql+redis+nginx 开发环境, 并实现一键自动化部署,保证了在各个平台上的一致性,既方便又高效。

    Ubuntu docker 20.10.12版本和docker-compose离线安装包

    本资源包提供的是Ubuntu 20.10.12版本上的Docker和Docker Compose的离线安装包,这对于那些没有稳定网络连接或者需要在隔离环境中的服务器上安装这些工具的用户来说,非常实用。 首先,我们来看Docker。Docker CE...

    在linux下使用docker搭建测试环境

    使用docker技术,用镜像产生容器,在一个虚拟机上搭建多套测试环境

    老版本docker-1.12.6

    docker-1.12版本rpm包,此版本docker已绝迹于江湖,本人踏破山巅,寻得此物,望诸君珍惜!

    docker-compose搭建php7.4(swoole+swoole-loader+dg)+mysql5.7环境

    本教程将详细解释如何使用docker-compose搭建一个包含PHP 7.4(集成Swoole和Swoole Loader扩展)以及MySQL 5.7的开发环境。 首先,让我们了解Docker。Docker是一种开源的应用容器引擎,它允许开发者打包他们的应用...

    Docker Desktop Installer(2.2.0.4)(历史版本)非网盘

    docker历史版本下载

    4.4.4版本windows-docker.zip

    使用4.4.4版本Windows Docker,开发者可以享受到容器化带来的诸多好处,如快速部署、一致的运行环境、资源利用率的提升等。此外,通过Docker Compose,可以方便地管理和部署复杂的多容器应用,简化开发流程。对于...

    docker 24.03 离线版本

    支持内网环境docker安装

    达梦8版本学习docker版本镜像

    达梦8版本学习docker版本镜像

    Docker构建PHP开发环境Docker-PHP.zip

    Docker-PHP 是基于 Docker 构建的集成开发环境。特性自定义配置文件数据存储在主机中软件栈MongoDBRedisMySQLPHP 7.1 PHP-FPMNginx with LuaJit  标签:Docker

    docker-ce-20.10.21 linux离线rpm安装包

    本教程将详细介绍如何在离线环境下使用RPM包安装Docker CE(Community Edition)版本20.10.21。 首先,我们需要了解Docker CE 20.10.21的离线安装过程涉及多个RPM包,总计28个。这些包包含了Docker服务本身及其依赖...

    DOCKER最新版本资源安装包

    最新版本的Docker提供了更多的功能和改进,包括更快的构建和部署、更好的安全性和更好的性能。如果您想使用最新版本的Docker,以下是一些推荐的使用说明: 下载并安装最新版本的Docker资源安装包。 配置Docker环境...

    docker-compose1.26.0版本.zip

    该包是原版docker-compose文件,绝对保证可靠能用,docker-compose version 1.26.0=》这是我安装后检测到的版本,方便你我他

    docker&docker-compose 19.03.14二进制安装

    Docker 19.03.14是Docker的一个稳定版本,包含了多项性能优化和安全改进。这个版本引入了对多架构的支持,包括x86_64(AMD64)和arm64(ARM64),这使得Docker可以在更多类型的硬件平台上运行,如服务器、个人电脑和...

Global site tag (gtag.js) - Google Analytics