2016-03-05 9 views
0

我开始使用码头化微服务。从本地开发到码头化微服务

其中有几个正在运行(请参阅下面的代码段)。在我的本地测试设置中,每个服务都在localhost:somePort。例如。前端会尝试连接到后端API localhost:backend1。 现在在容器化的世界里,这不再起作用。我应该运行一个完整的服务发现解决方案,如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 
+0

你确定你没有太多的服务吗? –

+0

对于这个问题,只有'service1-backend'和'service1-frontend'是相关的。但会有更多。 –

回答

2

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

  1. service1-backend需要有一个端口暴露了其Dockerfile指定
  2. service1-frontend需要有一个链接到service1-backend在撰写文件。

然后在前端,您可以访问后端只需使用service1-backend:port

+0

虽然使用同一服务的多个实例时这是不够的(除非你想有额外的负载均衡服务 - 尽管不建议这样做)。然后服务需要通过其独特的IP(172.x.x.x)进行通信。对于最简单的用例就没有问题。您还可以为每个容器使用唯一的Docker提供的环境变量 - HOSTNAME。 – kboom