[英]How to access httpd.conf in Docker from a php image that included apache by itself?
[英]Alpine variants of PHP and Apache/httpd in Docker
我正在尝试使用Docker,并希望从本地MAMP堆栈转移到Docker。 当然我偶然发现官方的php:7.0
图像,但我也想使用Apache,所以看起来好像是php:7.0-apache
是要走的路。 但是我看到有一个名为php:7.0-alpine
的图像php:7.0-alpine
,它更加纤薄,而Apache有两个版本,即httpd:2.4
和httpd:2.4-alpine
。
是否有任何建议的组合使用Apache和PHP(分离或组合),同时仍然具有小图像大小? 此外,我想知道在哪里可以查看图像中的可用模块,因为我想使用MariaDB和mod_rewrite,这可能有更多的依赖关系,这些依赖关系已被省略以保持较小的尺寸。
我遇到了这个非常详细和令人敬畏的教程,关于如何将nginx和PHP以及MySQL分成不同的容器,但是使用FCGI将PHP附加到nginx。 这意味着我可以使用工具的所有不同的基于阿尔卑斯的图像并使用FCGI链接它们。 不幸的是,我从未听说过或曾与FCGI合作,但我想更多的研究将会产生有关如何使用Apache实现此基础架构的信息。
除了为我提供的helmbert提出的解决方案之外,我还在使用官方的httpd:2.4-alpine
图像。 我想补充一些更多的信息和警告我在这方面的工作中偶然发现。
a2en*
和没有a2dis*
脚本。 /etc/apache2
没有通用文件夹结构。 一切都在/usr/local/apache2
,你在/usr/local/apache2/conf/
有你的全局httpd.conf
。 在此文件中,您必须手动取消注释模块行以加载它们以及httpd-vhosts.conf
存储在/usr/local/apache2/conf/extra/
其他配置文件。 httpd-vhosts.conf
为我的测试设置了基本选项: <VirtualHost *:80>
DocumentRoot /usr/local/apache2/htdocs
<Directory /usr/local/apache2/htdocs>
Options -Indexes +FollowSymLinks -MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /usr/local/apache2/main-error.log
LogLevel warn
CustomLog /usr/local/apache2/main-access.log combined
</VirtualHost>
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
./bin/apachectl restart
,假设您在/usr/local/apache2
。 nano
我必须使用apk --no-cache add nano
手动安装它。 这可以在交互式会话中完成,也可以使用Dockerfile
全局分叉基础映像。 nano
时出错 - 在我的情况下,我必须在交互式shell中export TERM=xterm
或在Dockerfile
ENV TERM xterm
。 php-fpm
必须能够访问相同的文件 - 这是我最初在提议的解决方案中没有注意到的事情。 这意味着我将源文件安装在两个不同的路径( httpd
图像中的/usr/local/apache2/htdocs
和php-fpm
图像中的/var/www/html
)并且必须正确转发呼叫。 我在httpd.conf
使用了以下行。 ProxyPassMatch "^/(.*\.php)$" "fcgi://fpm:9000/var/www/html/$1"
fpm
名称是使用--link fpm
链接到httpd
并自动添加到/etc/hosts
容器的名称。 COPY
命令或应用基本sed
调用将所有更改添加到Dockerfile
。 SetHandler "proxy:unix:/var/run/php7-fpm.sock|fcgi://fpm/"
使用unix套接字,但我不知道这是否有用。 如果你想在不同的容器中运行Apache和PHP,你需要使用PHP-FPM容器(例如,使用php:7-fpm
或php:7-fpm-alpine
图像),然后使用FCGI连接两个。 默认情况下, 官方PHP-FPM图像为此公开TCP端口9000,这对于大多数情况应该是足够的。
对于PHP-FPM, 官方PHP图像应该没问题(关于大小, 7.0.14-fpm-alpine
标签的大小只有31M)。 关于Apache,我喜欢webdevops/apache
图像 (我没有任何关联)。 它还附带一个基于Alpine的版本,只有38M大小,与PHP-FPM一起使用。
以下是使用FCGI链接在一起的单独PHP-FPM和Apache容器的方法:
$ docker run -d \
-v /path/to/data:/var/www/html \
--name fpm \
php:fpm-7.0.14-alpine
$ docker run -d \
-v /path/to/data:/var/www/html \
--name apache \
--link fpm \
-e WEB_PHP_SOCKET=fpm:9000 \
-e WEB_DOCUMENT_ROOT=/var/www/html \
webdevops/apache:alpine-3
要使用Nginx,只需将webdevops/apache
图像替换为webdevops/nginx
。
由于您还询问了如何向映像添加其他PHP扩展:这在官方PHP映像的文档中有所介绍。 您可以通过在自定义Dockerfile中运行docker docker-php-ext-install
将自定义PHP扩展添加到PHP基本映像:
FROM php:7.0.14-fpm-alpine
RUN docker-php-ext-install pdo_mysql
这允许您基于其中一个PHP-FPM基础映像构建自定义映像,并在Dockerfile
添加所需的所有扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.