如何使用docker-compose在链接到另一个容器的容器中运行linux守护进程?

如何使用docker-compose在链接到另一个容器的容器中运行linux守护进程?

免责声明:我之所以在这里发布此问题,是因为人们开始投票关闭 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)进行通信。

在我看来,我需要:

  1. 将复制myappdnginx容器中/usr/local/bin,使用使其可执行chmod +x并在后台运行。
  2. 创建一个不同的容器,复制myappd/usr/local/bin,使其可执行chmod +x,然后在前台运行它。

现在,我是 Docker 的新手,正在研究和学习它,但考虑到我正在使用 Docker Composer,我最好的猜测是选项 2 可能是推荐的选项?鉴于我对 Docker 的了解有限,我不得不猜测这个容器需要某种基于 Linux 的映像(如 Ubuntu 等)来运行这个二进制文件。所以也许选项 1 是首选?或者也许选项 2 可以使用最小的 Ubuntu 映像来实现,或者也许没有这样的映像也可以实现?

无论如何,我不知道如何在 Composer 文件上实现这一点。特别是选项 2,PHP 应用程序如何与不同容器中的守护进程通信?只需像我对 nginx/php 服务所做的那样“共享”一个卷(二进制文件所在的位置)就足够了吗?还是需要其他东西?

相关内容