首页 > 解决方案 > 多个应用程序(微服务)和一个代理(nginx)docker-compose 配置/架构

问题描述

具有以下架构:

以下哪个选项最适合在生产环境中部署?

  1. Docker Compose 覆盖。每个微服务都有一个 docker-compose,代理有另一个 docker-compose。生产部署完成后,所有 docker-compose 将被合并以仅创建一个(使用docker-compose -f microservice1/docker-compose.yml -f microservice2/docker-compose.yml -f proxy/docker-compose.yml up.根据要求。
  2. 共享外部网络。每个微服务都有一个 docker-compose,代理有另一个 docker-compose。首先,必须创建一个外部网络来链接代理容器和微服务。docker network create nginx_network. 然后,在每个 docker-compose 文件中,应该在必要的容器中引用该网络,以便代理可以看到微服务,从而能够在配置中使用它们。以下链接https://stackoverflow.com/a/48081535/6112286中有一个示例。

第一个选项很简单,但在配置许多微服务或应用程序时提供的灵活性很小,因为所有应用程序的所有 docker-compose 都需要合并以生成最终配置。第二种选择使用网络,这是 Docker 的基本支柱。另一方面,您不需要合并所有 docker-compose。

在这两个选项中,考虑到有多个微服务并且需要一个代理来配置访问的场景,哪个是最好的?为什么?

Tnahks 提前。

标签: dockerdocker-composedockerfile

解决方案


还有第三种方法,例如记录在https://www.bogotobogo.com/DevOps/Docker/Docker-Compose-Nginx-Reverse-Proxy-Multiple-Containers.phphttps://github.com/Einsteinish/ Docker-compose-Nginx-Reverse-Proxy-II/。它的要点是让代理加入所有其他网络。因此,您可以保持其他撰写文件(可能来自软件发行版)未修改。

码头工人-compose.yml

version: '3'
services:
  proxy:
    build: ./
    networks:
      - microservice1
      - microservice2
    ports:
      - 80:80
      - 443:443

networks:
  microservice1:
    external:
      name: microservice1_default
  microservice2:
    external:
      name: microservice2_default

代理配置

代理将通过名称microservice1_app_1和引用主机microservice2_app_1,假设服务app在目录microservice1和中调用microservice2


推荐阅读