【问题标题】:I have multiple flask microservices that all communicate with each other, how would I configure docker?我有多个相互通信的烧瓶微服务,我将如何配置 docker?
【发布时间】:2017-07-25 12:24:05
【问题描述】:

我有多个烧瓶微服务(这显然是为了保护 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-compose.yml?这些微服务中的每一个都相互通信。任何和所有

【问题讨论】:

  • 这些服务是相互导入还是通过 tcp 端口进行通信?
  • 目前通过气流管道进行通信,基本上只是使用 http 请求(虽然 tcp 更好)
  • 如果没有更多信息,真的很难提供帮助。是的,每个人都需要一个 Dockerfile 并公开适当的端口。或者您可以使用一个 Dockerfile,公开所有端口,然后通过 python 二进制文件运行相应的服务。
  • 什么样的信息有用?
  • 端口号?这些服务如何工作的示例?

标签: python docker flask dockerfile microservices


【解决方案1】:

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

微服务架构的一些优点:

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

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

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

其他任务:

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

【讨论】:

  • 非常感谢您的回答!这是我正在寻找的一个很好的答案!一旦我把每个人都变成了自己的 docker 容器,我会在目录的根目录下放一个 docker compose 吗?
  • 没错,你需要创建 docker-compose 文件,指定网络、容器、图像(你也可以即时构建)
  • 太棒了!非常感谢 :) 你知道我可以在哪里了解更多关于这样做的好指南吗?
  • 看一下compose v3官方参考,并尝试看网上的例子,这是最好的学习方式。 (您也会注意到其中的不良做法也会教给您。
  • 满足特定功能的每组微服务都驻留在同一个仓库中,而这是常态。但是@FarhadFarahi 建议的方法要求所有微服务都驻留在一个存储库中?
猜你喜欢
  • 2019-07-24
  • 2020-08-19
  • 2017-05-28
  • 1970-01-01
  • 2021-11-07
  • 2020-06-04
  • 2021-01-24
  • 2019-09-19
  • 1970-01-01
相关资源
最近更新 更多