【问题标题】:From local development to dockerized microservices从本地开发到 dockerized 微服务
【发布时间】:2016-03-05 17:46:25
【问题描述】:

我开始使用 dockerized 微服务。

其中几个正在运行(参见下面的代码 sn-p)。在我的本地测试设置中,每个服务都可以在localhost:somePort 获得。例如。前端会尝试连接到localhost:backend1 的后端API。 现在在容器化的世界中,这不再起作用了。我应该运行像consuletcd 这样的完整服务发现解决方案吗?还是我应该尝试使用 docker 的命名服务从前端访问后端? https://docs.docker.com/compose/networking/

version: '2'
services:
  service1-backend:
    image: service1:0.0.1
    links:
      - service1-frontend
  service1-frontend:
      image: service1-frontend:0.0.1
      links:
            - service2-frontend
      ports:
              - "8080:80"
  service2-backend:
      image: service2-backend:0.0.1
      links:
            - service1-backend
            - service2-frontend
            - service3
  service2-frontend:
      image: service2-frontend:0.0.1
      ports:
              - "8081:80"
  service3:
      image: service3:0.0.1

【问题讨论】:

  • 你确定你没有太多的服务吗?
  • 这个问题只有service1-backendservice1-frontend 是相关的。但还会有更多。

标签: networking docker microservices service-discovery


【解决方案1】:

如果service1-frontend需要通过name:port访问service1-backend,你需要:

  1. service1-backend 需要在其 Dockerfile 中指定端口暴露
  2. service1-frontend 需要在撰写文件中包含指向 service1-backend 的链接。

然后在前端,你可以使用service1-backend:port访问后端。

【讨论】:

  • 这在使用同一服务的多个实例时是不够的(除非你想为负载平衡提供额外的服务——但不推荐这样做)。然后服务需要通过其唯一的 ip (172.x.x.x) 进行通信。对于一个最简单的用例来说,这很好。您还可以为每个容器使用为 docker 提供的唯一环境变量 - HOSTNAME。
猜你喜欢
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2015-06-02
  • 1970-01-01
相关资源
最近更新 更多