in this repository we Deploy Django Poll App on Docker Swarm
is the cluster solution based on docker containter to stablish HA For Containers
the senario that we assume is :
there is Poll App Created with Django that you can create poll and see result .this app lunch on port 9000 and path is /poll .
prepare 3 vm and every one have two network interface . one of them is for private connection between cluster node .
see swarm nodes :
docker node ls
initialaize docker cluster (you get error because you have two have ):
docker swarm init
(Master node)#docker swarm init --advertise-addr PRIVATE_IP
(For adding other nodes to manager as worker node do this command on other nodes):
docker swarm join --token SWMTKN-1-0ug3tns725f08jre3a8kl9o48j6xu4wagi0rmqdxrstc2hbwdt-8j1e1yi08u4hvf9u4w4gjh1li 192.168.56.102:2377
(For leaving node fron orchastrator):
docker swarm leave --force
(to add all node as manager):
docker node promote swarm-2
docker node promote swarm-3
(for logout one node from manager):
docker node demote swarm-2
replica 1 for app and db
(Master node)
# apt-get install nfs-kernel-server
# apt-get install nfs-common
# mkdir -p /var/nfs/db
# sudo chown nobody:nogroup /var/nfs/db
# vi /etc/exports
/var/nfs/db 192.168.56.0/24(rw,sync,no_subtree_check,no_root_squash)
(open port on firewall)
# sudo ufw allow from 192.168.56.0/24 to any port nfs
# sudo systemctl restart nfs-kernel-server
#exportfs -a
(create registery)
docker service create --name registery --publish published=5000,target=5000 registery:2
push used image in docker compose to registery that all node have access to them :
docker-compose push
bring up docker compose to have project on master node :
docker-compose up -d
deploy django app on swarm cluster :
docker stack deploy --compose-file docker-compose.yml pollingservice
right now , we can see our app on all node :
see replicated service on cluster :
see proccess of service :
docker service ps pollingservice
(for scale service):
docker service scale pollingservice=2
(for down scale):
docker service scale test-swarm=1
for removing service its recomended to set replicas to 0
docker service scale test-swarm=0
or
docker service rm test-swarm
docker service create --name pollingservice --replicas 2 --publish published=8080,target=80 pollingservice
for maintenance server :
docker node update --availability drain docker-swarm-1
monitor swarm health:
docker node inspect manager1 --format "{{ .ManagerStatus.Reachability }}"
docker node inspect manager1 --format "{{ .Status.State }}"
(backup and resotre) :
/var/lib/docker/swarm
docker service update SERVICE_NAME