2

对于 DevOps 大学项目,我们的任务是使用 docker 和 Jenkins 等构建 Web 视频流服务。我们完全可以自由支配我们的工作方式...... Swarm 看起来很有趣,所以我想我会给它一个去(因为它进行复制可能会给我一些奖励积分)。

我的背景是数据(python 很有趣),所以服务器和网络等不是我的强项。此外,这一切都是在我的机器上本地完成的。

我正在努力与实际的 docker 服务进行通信(softinstigate/restheart 图像与 Mongodb 服务进行通信)。

它在两台 docker 机器上复制。然后连接到本地网络,本地网络又连接到另一个“代理”覆盖网络。

那么,如何连接到特定的 restheart api 服务以获取 HTML 页面的一些数据?普通容器构建等将是 localhost:chosenport。但我相信 docker-machines 是不同的 IP 地址?端口号是怎么定义的?

本质上,一个人如何从一个网站页面连接到一个群体中的特定服务?

我找到了几篇文章可以通读,但当时无法理解。想我可能已经尝试将 localhost 地址更改为领导群节点的 IP 地址,这似乎不起作用(但这是不久前的事了)。

用于设置的 Docker 命令在我的手机上运行。

# https://technologyconversations.com/2016/07/29/docker-swarm-introduction-tour-around-docker-1-12-series/

#### create machines

for i in 1 2 3; do
echo docker-machine create -d virtualbox node-$i
docker-machine create -d virtualbox node-$i
done

docker-machine ls


#### active machine = node-1
eval $(docker-machine env node-1)


#### node-1 join swarm

echo node-1 joins swarm as manager, token variable saved as $TOKEN
docker swarm init     --advertise-addr $(docker-machine ip node-1)  --listen-addr $(docker-machine ip node-1):2377


#### token value for swarm as a envirnomanet variable
TOKEN=$(docker swarm join-token -q worker)


#### join the relevant worker nodes to the swarm
for i in 2 3; do
echo node-$i to join the swarm
eval $(docker-machine env node-$i)
docker swarm join     --token $TOKEN  $(docker-machine ip node-1):2377
done


#### move vack to node-1
echo moving back to node-1
eval $(docker-machine env node-1)


#### https://github.com/vfarcic/docker-flow-proxy/blob/master/articles/swarm-mode-listener.md


#### create networks
echo starting networks
docker network create --driver overlay webapp-data-store
docker network create --driver overlay proxy


#### create swarm listener monitor on proxy network
echo starting swarm listener service.....
docker service create --name swarm-listener --network proxy \
    --mount "type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock" \
    -e DF_NOTIF_CREATE_SERVICE_URL=http://proxy:8080/v1/docker-flow-proxy/reconfigure \
    -e DF_NOTIF_REMOVE_SERVICE_URL=http://proxy:8080/v1/docker-flow-proxy/remove \
    --constraint 'node.role==manager' \
    vfarcic/docker-flow-swarm-listener


#### create proxy service on proxy network
echo proxy service start up
docker service create --name proxy \
    -p 80:80 -p 443:443 -p 8080:8080 \
    --network proxy \
    -e MODE=swarm \
    -e LISTENER_ADDRESS=swarm-listener vfarcic/docker-flow-proxy


#### RESTHEART SERVICE
echo start the restheart service
docker service create --name video-restheart \
    --network webapp-data-store
    --replicas 3 \
    softinstigate/restheart

# video mongo data store

echo video-db start up
docker service create --name video-db \
    --network webapp-data-store
    --replicas 3 \
4

1 回答 1

2

Docker Swarm 模式有一个内部负载平衡。每当您创建一个发布了某个端口的服务时,您都可以通过点击任何管理节点或工作节点来访问该服务。例如:经理 IP 192.168.2.2 工作人员 IP 192.168.2.3

假设服务在 9000 端口的工作节点中运行,您可以通过 192.168.2.2:9000 或 192.168.2.3:9000 访问它。Docker 内部将负责将请求路由到正确的容器。

请浏览此博客以全面了解。http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html

此外,您可以为容器配置 LB 并命中 LB,而不是直接命中容器。你可以在这里找到一个例子......

https://technologyconversations.com/2016/08/01/integrating-proxy-with-docker-swarm-tour-around-docker-1-12-series/

于 2016-12-20T14:50:39.393 回答