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
大功告成!