在 conf 文件或 vhosts 文件中使用 docker-compose expose 和 FastCgiExternalServer
(请注意,这是我将采用并且仍在研究的一种方法。我会根据我的了解进行更新。但希望它也可以为您提供如何做的大纲。我确实更新了我的答案,而不是空洞的承诺,请参阅此处的示例:Getting a LAMP stack running on a Vagrant VM (under windows 7 host), full instructions? )
安装docker-compose,它提供了一种官方标准化的方式来批处理/自动运行 docker 容器,使用docker-compose.yml
文件,而不是使用命令行docker
命令单独启动每个命令。
在docker-compose.yml
文件中,定义您的 php-fpm 服务,例如:
服务:
使用EXPOSE
关键字语句/指令使 php-fpm 的端口可用于 apache。
expose
本文中显示了一个示例:多个版本的 AMP 在一个主机中,示例docker-compose.yml
中包含此公开语句:
expose:
- "3306"
- 这使得 sql 数据库可用于其他 docker 容器。
您还需要确保 php 和 apache 容器都可以使用 php 文件 - 信用:https ://stackoverflow.com/a/40449377/227926
expose:
然后,需要从FastCgiExternalServer
vhosts 文件或 conf 文件中的 Apache 指令引用相同的端口以及服务名称。我认为,选择一个 vhosts 文件或 conf 文件来放置指令似乎是个人偏好,尽管研究可能会发现其中一个或另一个更适合您的情况的差异。
conf 文件中的示例如下所示:
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
我应该把它放在什么conf文件中?
回答:有几个选项(如上所示),更详细地说,这些是(假设 Ubunut/Debian Linux 是 Apache 在其上运行的操作系统): - httpd.conf - 000-default.conf(默认vhost)(在可用站点中)-yoursite.conf(在可用站点中)-和(例如)/etc/apache2/conf-available/php5.6-fpm.conf
这些 conf 文件将位于何处?
答:在您的 apache docker 容器中。定义服务后,您将需要使用 docker-compose.yml 文件将描述的设置添加(注入)到容器中。您可以从 docket-compose.yml 执行标准 linux 命令,将文本插入配置文件。
您应该自动添加这些设置,而不是手动编辑容器内的 Apache 配置文件,因为:1) 自动意味着设置是可重复的,因此可以用于开发工作流程中的不同平台:dev、qa、 uat, live/prod 2) 不需要手动工作 3) Docker 容器旨在是短暂的,因为它们可以被销毁和重新创建。任何持久性数据都应保存在它们之外 - 在主机中 -(Dockerfiles 中的配置、docker-composer 文件、单独文件夹中的资产(图像)、容器外部和主机上的数据库存储。
FastCgiExternalServer 指令的示例:
对 conf 文件和 Apache 的 Debian/Ubuntu 约定的引用
关于 PHP-FPM 的讨论
- https://serverfault.com/questions/645755/differences-and-dis-advanages-between-fast-cgi-cgi-mod-php-suphp-php-fpm
有关 docker-file.yml 语句的有用相关信息
一起运行单独容器的类似讨论