docker - 多个应用程序(微服务)和一个代理(nginx)docker-compose 配置/架构
问题描述
具有以下架构:
- 微服务 1 + 数据库 (microservice1/docker-compose.yml)
- 微服务 2 + 数据库 (microservice2/docker-compose.yml)
- 代理 (proxy/docker-compose.yml)
以下哪个选项最适合在生产环境中部署?
- 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
.根据要求。 - 共享外部网络。每个微服务都有一个 docker-compose,代理有另一个 docker-compose。首先,必须创建一个外部网络来链接代理容器和微服务。
docker network create nginx_network
. 然后,在每个 docker-compose 文件中,应该在必要的容器中引用该网络,以便代理可以看到微服务,从而能够在配置中使用它们。以下链接https://stackoverflow.com/a/48081535/6112286中有一个示例。
第一个选项很简单,但在配置许多微服务或应用程序时提供的灵活性很小,因为所有应用程序的所有 docker-compose 都需要合并以生成最终配置。第二种选择使用网络,这是 Docker 的基本支柱。另一方面,您不需要合并所有 docker-compose。
在这两个选项中,考虑到有多个微服务并且需要一个代理来配置访问的场景,哪个是最好的?为什么?
Tnahks 提前。
解决方案
还有第三种方法,例如记录在https://www.bogotobogo.com/DevOps/Docker/Docker-Compose-Nginx-Reverse-Proxy-Multiple-Containers.php和https://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
。
推荐阅读
- windows - 如何读取 GetDeviceCaps() 返回值?
- c# - OpenXML 在文档顶部或表格之前插入烦人的回车
- ruby-on-rails - Rails - 从另一个模型中的模型创建实例
- r - 检查是否在 R 中安装包没有错误
- android - Exception Inflating on Navigation View using RecyclerView, Fragment, and Activity with Kotlin
- r - R - ggplot2:在图例中插入副标题
- jquery - Material Design - 单击表格行复选框时创建操作
- python - 如何将某些内容附加到excel文件的新行?
- javascript - WebStorm 在 jQuery 项目中将所有 $-operators 突出显示为“未知”
- java - 如何在 ProcessBuilder 中运行长命令