【发布时间】:2018-03-19 07:55:56
【问题描述】:
我在 docker 中运行一个 java 服务,它基本上是一个套接字服务器。我能够使用 docker 容器运行它,并且能够在主机上发布和公开端口,并且能够使用客户端进行连接。到目前为止一切正常。
这个 java 服务是单线程的,需要这样。因此,为了能够同时处理多个请求,我需要能够扩展它——通过动态生成多个 docker 容器以在不同的端口上运行
我正在考虑编写一个“监听器”,它将接收来自客户端的请求,在随机端口上生成一个带有 java 服务的 docker 容器,将 ip 和端口共享给客户端,从那时起,客户端将直接连接基于 docker 的 java 服务。所以基本上编写一个代理来使用 docker SDK 来处理这个问题。这种方法听起来正确吗?还有其他更好的方法吗?
谢谢
编辑
我需要的是“按需扩展”——每个客户请求一个新实例。不像为负载平衡或高可用性进行缩放。所以我需要能够将新生成的 docker 容器的 IP 和端口共享给客户端,然后客户端可以直接与容器连接。
编辑#2
我设置了 Kubernetes 并在其上部署了一个虚拟的 java 套接字服务。我有两个节点都具有公共 IP。我确认我能够以两种方式连接到服务器套接字 (1) 通过在所需主机端口上连接服务的负载均衡器 (2)通过在容器获取的随机端口上连接两个节点的公网ip并映射到所需的主机端口
这意味着如果我在容器启动时编写一个脚本来将容器(节点)ip 和它获得的随机端口发布到一些外部实体,如 MongoDB 或类似的东西,我的经纪人可以分享那个与客户端程序开始直接通信。
这听起来可行吗?
【问题讨论】:
-
我认为没有其他方法可以做到这一点。您需要某种代理,它会在有人请求时生成一个新容器。
-
谢谢 Michael .. 这就是我最初的想法,但我想排除像下面建议的 @yamenk 那样使用像 kubernetes 或 swarm(具有一些配置)这样的成熟解决方案的可能性。
标签: docker kubernetes docker-swarm swarm