使用PHP-FPM在Apache服务器中运行PHP应用程序

时间:2019-04-09 17:29:35

标签: php docker apache2 fpm

我们有一个php应用程序,使用它运行良好  Docker映像:

  

php:7.2-apache-stretch

我们现在必须利用下图获得更好的性能,并使应用程序像以前一样工作。

  

php:7.2.17-fpm-stretch

由于该图片中没有apache。我从安装apache2和基于各种论坛的相关软件包开始更新了Dockerfile。

还有许多其他步骤。我刚刚添加了在Dockerfile中更新的说明。

 FROM php:7.2.17-fpm-stretch

RUN apt-get update && apt-get install -y apache2 wget

RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f

RUN a2enmod actions proxy_fcgi fastcgi
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY info.php /var/www/html/info.php
COPY run.sh /app/run.sh
# EXPOSE 9000
RUN chmod 755 /app/run.sh
CMD "/app/run.sh"

info.php包含<?php phpinfo( ); ?>。在run.sh脚本中,我们如下所示启动php-fpm服务和apache2

  

php-fpm -D

     

/ usr / sbin / apachectl -D FOREGROUND

以前,我试图从映射到9000(fpm)的端口访问该应用程序。当我访问运行apache的正确端口时,我能够查看info.php。

vhost.conf文件中的内容。

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>

3 个答案:

答案 0 :(得分:2)

我做了一些修改。

我使用了这个经过稍微修改的dockerfile:

FROM php:7.2.17-fpm-stretch

RUN apt-get update; apt-get install -y apache2 wget

RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f


RUN a2enmod actions proxy_fcgi fastcgi

COPY run.sh /app/run.sh
RUN chmod 755 /app/run.sh
CMD "/app/run.sh"

我还向/etc/apache2/sites-available/000-default.conf中添加了以下代码段(与您所做的修改相同):

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>

这是我得到的输出:

[09-Apr-2019 21:23:06] NOTICE: fpm is running, pid 9
[09-Apr-2019 21:23:06] NOTICE: ready to handle connections
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

还,您是否尝试在没有缓存的情况下构建dockerfile?有时,缓存可能会导致软件包安装出现问题(有关更多详细信息,请参见here)。要完整构建图像,只需使用:

docker build --no-cache 

答案 1 :(得分:1)

我使用此dockerfile使新配置正常工作

FROM php:7.2.17-fpm-stretch

RUN apt-get update && apt-get install -y apache2 wget

RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f

RUN a2enmod actions proxy_fcgi fastcgi
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY info.php /var/www/html/info.php
COPY run.sh /app/run.sh
RUN chmod 755 /app/run.sh
EXPOSE 80
CMD "/app/run.sh"

我运行的命令是:

docker run -P -d --rm <php-image>

暴露的端口是:

  

0.0.0.0:32773-> 80 / tcp,0.0.0.0:32772-> 9000 / tcp

我能够使用http://localhost:32773/info.php

访问info.php

答案 2 :(得分:0)

我能够访问php页面。一切都很好。但是我的方向错误。当我运行容器时。

docker run -P -d --rm php:test-fpm

输出为

82071c9ff023        php:test-fpm                    "docker-php-entrypoi…"   2 seconds ago       Up 1 second         0.0.0.0:32778->80/tcp, 0.0.0.0:32777->9000/tcp   practical_mclean

我正在访问localhost:32777 / info.php。但是我应该访问暴露了Apache和本地主机的32778:32778 / info.php正常工作! 。

有没有一种方法可以避免9000的端口映射。?