For a DevOps university project we've been tasked with building a web video streaming service using docker and Jenkins etc. We've got completely free reign over how we do it... Swarm looked interesting so I thought I'd give it a go (as it does replication that'll probably gimme some bonus points).
My background is data stuff (python was great fun) so servers and networking etc. are not my forte. Also, this is all being done locally on my machine.
I'm struggling with communicating with an actual docker service (softinstigate/restheart image to communicate with a Mongodb service).
It's replicated over two docker machines. Then connects to a local network, which in turn connects to another "proxy" overlay network.
So, how do I connect to that specific restheart api service to get some data for a HTML page? Normal containers build etc would be localhost:chosenport. But I believe with docker-machines it's a different IP address? How is the port number defined?
In essence, how does one connect to a specific service within a swarm from, say, a website page?
I found a few articles to read through but couldn't make heads or tails of it at the time. Think I might have tried changing localhost address to the leader swarm node's IP address which didn't seem to work (but it was a while ago).
Docker commands for setup to follow - on my phone at the 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 \