免责声明:我之所以在这里发布此问题,是因为人们开始投票关闭 SO 上的这个问题,认为其“偏离主题”。尽管有些人认为 Docker 问题应该发布在 SO 上,而不是 SF 上,但其他人却持相反观点。
我有以下docker-compose.yml
文件,它运行带有 PHP 支持的 nginx:
version: '3'
services:
nginx:
container_name: my-app-nginx
image: nginx:1.13.6
ports:
- 8080:80
volumes:
- ./nginx-default.conf:/etc/nginx/conf.d/default.conf
- ./my-app:/var/www/my-app
restart: always
depends_on:
- php
php:
container_name: my-app-php
image: php:7.1-fpm
volumes:
- ./my-app:/var/www/my-app
restart: always
里面的 PHP 应用程序/var/www/my-app
需要与 Linux 守护进程(我们称之为myappd
)进行通信。
在我看来,我需要:
- 将复制
myappd
到nginx
容器中/usr/local/bin
,使用使其可执行chmod +x
并在后台运行。 - 创建一个不同的容器,复制
myappd
到/usr/local/bin
,使其可执行chmod +x
,然后在前台运行它。
现在,我是 Docker 的新手,正在研究和学习它,但考虑到我正在使用 Docker Composer,我最好的猜测是选项 2 可能是推荐的选项?鉴于我对 Docker 的了解有限,我不得不猜测这个容器需要某种基于 Linux 的映像(如 Ubuntu 等)来运行这个二进制文件。所以也许选项 1 是首选?或者也许选项 2 可以使用最小的 Ubuntu 映像来实现,或者也许没有这样的映像也可以实现?
无论如何,我不知道如何在 Composer 文件上实现这一点。特别是选项 2,PHP 应用程序如何与不同容器中的守护进程通信?只需像我对 nginx/php 服务所做的那样“共享”一个卷(二进制文件所在的位置)就足够了吗?还是需要其他东西?