我有多个相互通信的烧瓶微服务,我将如何配置 docker?

I have multiple flask microservices that all communicate with each other, how would I configure docker?

我有多个 flask 微服务(这显然是为了保护 IP 而混淆的)

├── README.md
├── api_starter.py
├── app_api.py
├── service1
│   ├── __init__.py
│   ├── api.py
│   └── service1.py
├── service2
│   ├── __init__.py
│   ├── api.py
│   ├── service2.py
├── dags
│   ├── airflow_pipeline_runner.py
├── service3
│   ├── __init__.py
│   ├── api.py
│   ├── service3.py
├── service4
│   ├── __init__.py
│   ├── api.py
│   └── service4.py
├── service5
│   ├── __init__.py
│   ├── api.py
│   └── service5.py
├── service6
│   ├── __init__.py
│   ├── api.py
│   └── service6.py
├── requirements.txt
└── service7
    ├── __init__.py
    ├── api.py
    └── service7.py

api_starter 运行 这些微服务中的每一个。这些微服务中的每一个都相互通信。 docker优化此应用程序的最佳方式是什么?我是否给每个微服务一个 docker 文件,然后在目录的根目录中有一个 docker-compose.yml?这些微服务中的每一个都相互通信。任何和所有

为了尊重 docker 的理念并利用微服务架构必须提供的所有优点,您应该将每个微服务放在自己的容器中。

微服务架构的一些优势:

  • 改进了故障隔离
  • 消除对单一技术堆栈的长期承诺
  • 使新开发人员更容易理解功能 服务
  • 更轻松的升级管理
  • 提高安全性
  • 韧性
  • 更容易扩展
  • 更轻松的部署
  • ...

为此,您应该首先为您的相关容器创建一个用户定义的网络。用户定义的网络具有内部 DNS,因此您可以通过名称解析同一网络上的其他容器 ip。

然后您需要将 api_starter 拆分为特定于微服务。

其他待办事项:

  • 为每个微服务指定持久数据路径(如果适用)
  • 指定要公开的网络端口。