我试图让一个PHP FPM应用程序在Google Cloud Run(Docker)上运行,但我不确定如何将其设置为使用FPM而不是Apache运行?我到处都找过了,但没有看到任何明确的指示。
我遵循了Google PHP Quickstart教程,所以我有这个工作的Dockerfile:
# Use the official PHP image.
# https://hub.docker.com/_/php
FROM php:apache
# Configure PHP for Cloud Run.
# Precompile PHP code with opcache.
RUN docker-php-ext-install -j "$(nproc)" opcache
RUN set -ex; \
{ \
echo "; Cloud Run enforces memory & timeouts"; \
echo "memory_limit = -1"; \
echo "max_execution_time = 0"; \
echo "; File upload at Cloud Run network limit"; \
echo "upload_max_filesize = 32M"; \
echo "post_max_size = 32M"; \
echo "; Configure Opcache for Containers"; \
echo "opcache.enable = On"; \
echo "opcache.validate_timestamps = Off"; \
echo "; Configure Opcache Memory (Application-specific)"; \
echo "opcache.memory_consumption = 32"; \
} > "$PHP_INI_DIR/conf.d/cloud-run.ini"
# Copy in custom code from the host machine.
WORKDIR /var/www/html
COPY . ./
# Use the PORT environment variable in Apache configuration files.
# https://cloud.google.com/run/docs/reference/container-contract#port
RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf
# Configure PHP for development.
# Switch to the production php.ini for production operations.
# RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# https://github.com/docker-library/docs/blob/master/php/README.md#configuration
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
有什么想法可以让它与PHP FPM一起工作吗?非常感谢!
我尝试将FROM php:apache
更改为FROM php:fpm
,但不起作用;我相信这一定是由于它仍然使用Apache的事实?抱歉,我对Docker有点陌生。
1条答案
按热度按时间zynd9foi1#
Apache和FPM是两个不同的东西。
简而言之:
因此,您不能将Apache从等式中删除,除非您计划用其他HTTP服务器替换它。
也就是说,
php:apache
使用mod_php
Apache模块来运行PHP,并且您 * 可以 * 在后台运行FPM的容器,但是:1.在一个容器中运行两个不同的守护进程总是有点烦人。[这可能是没有库映像的一个因素]
1.在最好的情况下,最终结果在功能上与仅按原样使用
php:apache
图像没有区别。正如我在评论中向@John-Hanley建议的那样,如果Cloud Run的代理可以说FCGI,则可能直接连接到FPM容器,但我认为情况不太可能如此,因为FCGI通常不是一个协议,即使是远程公开。更不用说你需要在你的应用程序和/或配置中做出特殊的调整来提供静态文件之类的东西[例如:images,css],通常由HTTP服务器直接处理。
简而言之:除非您准备投入大量的跑腿工作,否则即使有也不会有明显的差异,那么就按照建议使用股票
php:apache
图像。