借助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

在这种情况下,群集仅在多个主机的一个群集中,暴露了端口80。我想您可以暴露不同的端口,并将负载均衡器设置为proxy_pass到另一个端口,但是我想这很有可能仅在群集中公开hostname:port,因此,如果请求来自主机名和端口,则将转发该请求。如果需要多个主机或端口,则可以公开多个。

这可能可用,这就是为什么我问这个问题。也许可以使用HAProxy或Nginx的一些高级配置来复制它。我已经做了很多实验,发现很难做到这一点。如果您有任何意见或建议,请就该主题提供建议!

- 马库斯

最佳答案

发布端口时,它会绑定(bind)到节点的网络接口(interface)。
您可以通过使用放置约束来确保来自这两个服务的任务永远不在同一节点上,以实现这一目标,但是我认为最好使用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;
    }
  }
}

关于docker - 我可以在端口80和Docker Swarm中的不同主机名上运行两个单独的应用程序吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38242579/

10-16 23:45