我可以在端口80上运行两个单独的应用程序,在Docker Swarm中运行不同的主机名吗?

时间:2016-07-07 09:57:46

标签: docker haproxy docker-swarm docker-ucp

在1.12中使用新的令人兴奋的Docker Swarm,似乎很有可能在服务器集群中部署多个应用程序。

我正在寻找在同一端口和同一群集上部署两个独立应用程序或应用程序入口点的方法。请考虑以下事项:

    web.myservice.com:80 -> Swarm ->     Service[web] -> web.1
                                                      -> web.2
                                                      -> web.3

backend.myservice.com:80 -> Swarm -> Service[backend] -> backend.1
                                                      -> backend.2
                                                      -> backend.3

在这种情况下,swarm只在一个多个主机的集群中,暴露端口80.我想你可以暴露不同的端口并将负载均衡器设置为proxy_pass到另一个端口,但我想说它会很棒有可能只暴露集群中的hostname:port,所以如果请求进入主机名和端口,它将被转发。如果您需要多个主机或端口,则可以公开多个主机或端口。

这可能是可用的,这就是我提出这个问题的原因。也许可以使用HAProxy或Nginx的一些高级配置进行复制。我已经进行了相当多的实验,并发现很难实现这一点。如果您有任何意见或建议,请就该主题提出建议!

- 马库斯

1 个答案:

答案 0 :(得分:1)

发布端口时,它会绑定到节点的网络接口。 您可以通过使用放置约束来解决此问题,以确保来自两个服务的任务永远不会在同一节点上,但我认为最好有一个nginx服务来为您代理流量。

Swarm为您的服务创建DNS条目,以便您可以通过名称轻松访问它们,一个简单的nginx示例如下:

http {
...
  server {
    server_name web.myservice.com;

    location / {
      proxy_pass http://web:8080;
      proxy_redirect default;
    }
  }

  server {
    server_name backend.myservice.com;

    location / {
      proxy_pass http://backend:8080;
      proxy_redirect default;
    }
  }
}