Docker Swarm 模式下的浏览器服务容器

Docker Swarm 模式下的浏览器服务容器

我已经使用docker-machine创建了3个vm:

docker-machine create -d virtualbox manager1
docker-machine create -d virtualbox worker1
docker-machine create -d virtualbox worker2

这些是他们的 IP:

docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
manager   -        virtualbox   Running tcp://192.168.99.102:2376                                   v1.12.6
worker1   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.13.0-rc5  
worker2   -        virtualbox   Running   tcp://192.168.99.101:2376           v1.13.0-rc5   

然后docker-machine ssh manager1

和:

docker swarm init --advertise-addr 192.168.99.102:2377

然后 worker1 和 worker2 加入到集群。

现在我已经创建了一个覆盖网络:

docker 网络创建-d 覆盖 skynet

并以全局模式部署服务(每个节点 1 个任务):

docker service create --name http --network skynet --mode global -p 8200:80 katacoda/docker-http-server

并且节点实际上有 1 个容器(任务)。

现在,我想直接访问我的虚拟主机……或者至少我想直接浏览我的服务容器,因为我想用 nginx 开发我的服务的负载均衡器。为此,在我的 nginx conf 文件中,我想指向一个特定的服务容器(即现在我有 3 个节点(1 个管理器和 2 个工作者)处于全局模式,所以我有 3 个任务正在运行-->我想选择这 3 个容器中的一个)。我该怎么做?

[编辑]:我可以通过浏览指向我的 Swarm 节点:,即:

192.168.99.102:8200

但仍然有内部负载平衡。我当时想,如果我指向一个特定的 Swarm 节点,我将使用该特定节点内的容器。但目前还没有。

答案1

Docker 具有入口负载平衡。它是默认的负载平衡器。您可以使用 --endpoint-mode dnsrr 命令来执行 DNS 负载平衡。

如果您想使用像 nginx 这样的外部负载平衡,首先您应该启动 Nginx 容器并将配置文件复制到正在运行的容器中并替换旧文件。然后它将指向容器发布的端口和主机。

答案2

如果你可以在主机+全球模式,您可以使用外部负载均衡器。因为通过服务全球的模式下,每个属于集群的虚拟机上只有 1 个服务任务(即一个容器)。由于主持人模式中,服务任务端口被映射到“主机”(在本例中为虚拟主机:VM)。这样,外部负载均衡器(如 nginx)就可以将传入的请求转发到IP_VM:映射端口。希望我已经说清楚了 :)

相关内容