docker-compose搭建apache结合多个php版本同时运行的环境

apache结合php有多种方式,如果需要让apache能同时使用多个php版本,经过自己的了解,应该只能使用apache with php-fpm模式运行。

首先创建两个php的service(service中与本文无关的参数已经去除,方便理解):

// docker-compose.yml
version: '3'

services:
    php56:
      container_name: php56
      build:
        context: php56
      expose:
        - "9000"
    php72:
      container_name: php72
      build:
        context: php72
      expose:
        - "9000"
   apache2:
      container_name: apache2
      build:
        context: ./apache2
      ports:
        - "80:80"
        - "443:443"
      depends_on:
        - php56
        - php72
      networks:
        default:
          aliases:
            - "a.com"
            - "b.com"

然后创建对应php容器的文件夹以及Dokcerfile,每个php一个容器,例如:

// php72/Dockerfile
FROM jakesoft/php:7.2-centos

USER root

EXPOSE 9000

CMD ["php-fpm", "-F"]

php56/Dokcerfile与上面的文件类似

但是需要注意一点的是php-fpm如果想监听非本机环境的请求时,需要修改容器中的/etc/php-fpm.d/www.conf

listen = 0.0.0.0:9000
;listen.allowed_clients = 127.0.0.1 // 这一行前面增加";"注释掉

(所有的php容器都需要做此修改)

现在去修改apache的站点配置:

a.com 使用php5.6

<VirtualHost *:80>
    DocumentRoot "/var/www/a"
    ServerName   a.com

    <FilesMatch .*$>
        SetHandler "proxy:fcgi://php56:9000"
    </FilesMatch>
</VirtualHost>

b.com 使用php7.2

<VirtualHost *:80>
    DocumentRoot "/var/www/b"
    ServerName   b.com

    <FilesMatch .*$>
        SetHandler "proxy:fcgi://php72:9000"
    </FilesMatch>
</VirtualHost>

启动:

docker-compose up --build apache2

大功告成!

发表评论

电子邮件地址不会被公开。 必填项已用*标注