2

Für ein DevOps-Universitätsprojekt haben wir den Auftrag, einen Web-Video-Streaming-Dienst mit Docker und Jenkins usw. aufzubauen. Wir haben völlig freie Herrschaft darüber, wie wir es machen ... Swarm sah interessant aus, also ich Ich dachte, ich würde es versuchen (wie es Replikation, die wahrscheinlich einige Bonuspunkte gimme).Docker Swarm Service Networking

Mein Hintergrund ist Datenkram (Python war ein großer Spaß), so dass Server und Netzwerk usw. nicht meine Stärke sind. Auch das wird alles lokal auf meiner Maschine gemacht.

Ich habe Probleme mit der Kommunikation mit einem tatsächlichen Docker-Service (Soft Instigate/Restheart Bild mit einem Mongodb-Dienst kommunizieren).

Es ist über zwei Docker Maschinen repliziert. Stellt dann eine Verbindung zu einem lokalen Netzwerk her, das wiederum mit einem anderen "Proxy" -Overay-Netzwerk verbunden ist.

Also, wie verbinde ich mich mit diesem spezifischen Restheart-API-Dienst, um Daten für eine HTML-Seite zu erhalten? Normale Container erstellen usw. wäre localhost: selectedport. Aber ich glaube mit Docker-Maschinen ist es eine andere IP-Adresse? Wie ist die Portnummer definiert?

Im Wesentlichen, wie verbindet man sich mit einem bestimmten Dienst innerhalb eines Schwarms von, sagen wir, einer Website-Seite?

Ich fand ein paar Artikel zum Durchlesen, konnte aber zu der Zeit keine Köpfe oder Schwänze daraus machen. Ich glaube, ich habe versucht, die Localhost-Adresse in die IP-Adresse des Leader-Schwarmknotens zu ändern, was nicht zu funktionieren schien (aber es war schon eine Weile her).

Docker Befehle für die Einrichtung zu folgen - auf meinem Handy in der mo.

# 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 \ 

Antwort

2

Docker Swarm-Modus verfügt über einen internen LoadBalancing. Wenn Sie einen Dienst mit einem veröffentlichten Port erstellen, können Sie auf den Service zugreifen, indem Sie einen beliebigen Managerknoten oder Worker-Knoten drücken. Für Ex: Manager IP 192.168.2.2 Arbeiter IP 192.168.2.3

Say Dienst im Arbeits Knoten auf 9000 Port läuft Sie es durch 192.168.2.2:9000 oder 192.168.2.3:9000 zugreifen können. Docker intern kümmert sich um das Routing der Anfrage an den Container zu korrigieren.

Bitte gehen Sie durch diesen Blog, um ein vollständiges Verständnis zu erhalten. http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html.

Sie können auch eine LB für die Container konfigurieren und die LB drücken, anstatt direkt auf den Container zu treffen. Sie können ein Beispiel finden Sie hier ...

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