哪里公开zookeeper主机?

我有以下情况,如下所示:

在这里输入图像说明

如您所见,我安装了两台 Docker主机, Dockerhost1Dockerhost2 。 在两台主机内部, 2个Zookeeper容器正在运行。

我想,那所有的Zookeeper容器都是互相认识的,因为我想构build一个集群环境。

以下networking可用:

Dockerizer@docker1:~$ docker network ls NETWORK ID NAME DRIVER SCOPE dbf91cc26912 bridge bridge local 57f38c4c93ad host host local 5d54f5ce807e none null local 

我的问题是:

在哪个networking中,我必须运行Zookeeper容器? 我会猜测hostnetworking?

要在主机上运行两个容器,我将创build一个组合文件,其中包含:

 version: '3.1' services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 zoo2: image: zookeeper restart: always hostname: zoo2 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 

如何configurationnetworking,他们彼此都了解?

build议安装docker swarm,使其成为一个集群?

我可能会实施群集模式,而不是群集调度和pipe理作为一个缩放服务的容器,但包括覆盖networking。 您可以设置自己的k / v存储并将其用于覆盖networking,但主机1运行起来要容易得多:

 docker swarm init 

然后在主机2上运行output join命令。

然后,您可以创build一个覆盖networking,可连接并跨越两台主机:

 docker network create -d overlay --attachable zookeeper 

可连接使您可以使用群集服务之外的networking。 您只需在撰写文件中将其添加为外部networking:

 version: '3.1' networks: zookeeper: external: true services: zoo1: image: zookeeper restart: always hostname: zoo1 networks: - zookeeper ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 zoo2: image: zookeeper restart: always hostname: zoo2 networks: - zookeeper ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888