Chr*_*vic 9 php apache docker alpine-linux
我正在尝试使用Docker,并希望从本地MAMP堆栈转移到Docker.当然我偶然发现了官方php:7.0图片,但我也想使用Apache,所以看起来好像php:7.0-apache是要走的路.不过我看到有一个名为图像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实现此基础架构的信息.
如果要在单独的容器中运行 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 很好地配合使用。
以下是如何启动单独的 PHP-FPM 和 Apache 容器,并使用 FCGI 链接在一起:
$ 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
Run Code Online (Sandbox Code Playgroud)
要改用 Nginx,只需将webdevops/apache图像替换为webdevops/nginx.
由于您还询问了向图像添加其他 PHP 扩展的问题:官方 PHP 图像文档中对此进行了介绍。您可以通过docker-php-ext-install在自定义 Dockerfile 中运行来将自定义 PHP 扩展添加到 PHP 基础映像:
FROM php:7.0.14-fpm-alpine
RUN docker-php-ext-install pdo_mysql
Run Code Online (Sandbox Code Playgroud)
这允许您基于 PHP-FPM 基础镜像之一构建自定义镜像,在Dockerfile.
除了helmbert提出的解决方案对我有用之外,我正在摆弄官方httpd:2.4-alpine形象.我想补充一些更多的信息和警告我在这方面的工作中偶然发现.
a2en*和没有a2dis*脚本./etc/apache2.一切都在/usr/local/apache2和你有你的世界httpd.conf中/usr/local/apache2/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>
Run Code Online (Sandbox Code Playgroud)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Run Code Online (Sandbox Code Playgroud)
./bin/apachectl restart像往常一样假设你在/usr/local/apache2.nano我必须手动安装它apk --no-cache add nano.这可以在交互式会话中完成,也可以使用a Dockerfile来分叉基本映像.nano- 在我的情况下,我不得不export TERM=xterm在交互式shell中或ENV TERM xterm在Dockerfile.php-fpm必须能够访问相同的文件 - 这是我在提议的解决方案中实际上没有注意到的事情.这意味着,以及我有安装在两个不同的路径(的源文件/usr/local/apache2/htdocs中httpd的图像,并/var/www/html在php-fpm图像)并具有正确地转发呼叫.我用了以下几行httpd.conf.ProxyPassMatch "^/(.*\.php)$" "fcgi://fpm:9000/var/www/html/$1"
Run Code Online (Sandbox Code Playgroud)
fpm在FCGI链接名称是链接到我的容器的名称httpd使用--link fpm,并自动添加到/etc/hosts.Dockerfile使用COPY命令或应用基本sed调用添加所有更改.SetHandler "proxy:unix:/var/run/php7-fpm.sock|fcgi://fpm/"但我不知道这是否有用.| 归档时间: |
|
| 查看次数: |
8683 次 |
| 最近记录: |