![](/img/trans.png)
[英]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.