Install and Configure Docker Swarm On Ubuntu


Docke swarm 
Swarm is a clustering of the docker. Its a group of server on which you have hosted to different applications in order to provide some services and it's intention to insort that these services are always up and running. That we created cluster. Swarm support high availibility and we can join multyple manager to the cluster. So that if one manager node fails then onther can automatically take it's place withoud impact cluster. with swarm we can scale up our application horizantaly. we can increase number of containers instances for the same application.





Manager Node : manager nodes are manage cluster management tasks.
  • it's maintain cluster state.
  • scheduling services.
  • Serving swarm mode HTTP API Endpoint.

Worker node : worker nodes are used to execute containers. Worker node are instances of docker engine which executes containers .Worker nodes don’t participate in the raft distributed state, make scheduling decisions, or serve the swarm mode HTTP API. All manager node are also worker.

Scenerio :
Manager node : 10.80.253.11
Worker Node : 10.80.253.12

Requirement : 
  • Ubuntu 16.04
  • Docker need to be installed on ubuntu machine.
  • Allow Firewall port 7946, 4789, 2376, 2376, 2377 and  80


How to create docker swarm cluster : 
First we need to initialized manager node ip address which will act as a Manger node.
run below command on manager node.
$ docker swarm init --advertise-addr 10.80.253.11

it will give below output : 
root@master:~# docker swarm init --advertise-addr 10.80.253.11
Swarm initialized: current node (1zqxojtw1db70ngtty9p80760) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-2h4urabqbxvdj1r2qj65a4b58qdxafuk9n0afhw77umd0v56l5-5zx9uh2nm2ztz7icrhnk0j1pg \
    10.80.253.11:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Above out put is a tocket which add worker node to the cluster.

Now we will check status of manager node with below command : 
If everything will be fine then you should see below output.

root@master:~# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
1zqxojtw1db70ngtty9p80760 *  master    Ready   Active        Leader
root@master:~#


You can also check docker swarm cluster status by following command.
root@master:~# docker info


How to add worker node to the swarm cluster. we will execute command on worker node now.
Just go back that output on manager node copy and then past here in worker node to join swarm cluster.

root@slave1:~# docker swarm join \
>     --token SWMTKN-1-2h4urabqbxvdj1r2qj65a4b58qdxafuk9n0afhw77umd0v56l5-5zx9uh2nm2ztz7icrhnk0j1pg \
>     10.80.253.11:2377
This node joined a swarm as a worker.


Now run below command on manager node to list worker node.

root@master:~# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
1zqxojtw1db70ngtty9p80760 *  master    Ready   Active        Leader
bday59dl1gesb0944dtj2tobe    slave1    Ready   Active

How to launch service in docker swarm node.
our docker swarm is now up and running. let's test some application. we will run httpd service.

root@master:~# docker service create --name mywebserver -p 80:80 httpd
ydvq0ij2knwjlxrtsw7wf2g48


above command will create httpd service and it will mapped it to port 80.

To check service running or not by following command.
root@master:~# docker service ps mywebserver
ID            NAME           IMAGE         NODE    DESIRED STATE  CURRENT STATE          ERROR  PORTS
xkhwxt5cs42w  mywebserver.1  httpd:latest  master  Running        Running 2 minutes ago

we can scale web services across different containers. in swarm we can scale up and down services by creating additional instances. Currently we have running only one container "mywebserver.1" on docker manager. let's scale this to 3 instances.

root@master:~# docker service scale mywebserver=3
mywebserver scaled to 3


To check the scaling.

root@master:~# docker service ps mywebserver
ID            NAME           IMAGE         NODE    DESIRED STATE  CURRENT STATE           ERROR  PORTS
xkhwxt5cs42w  mywebserver.1  httpd:latest  master  Running        Running 5 minutes ago
ntf2kcklonrg  mywebserver.2  httpd:latest  slave1  Running        Running 18 seconds ago
y97ki659r1zy  mywebserver.3  httpd:latest  slave1  Running        Running 18 seconds ago


You can see 3 node are up and running in swarm.

Now we will check docker swarm. apache service is running in manager node . we will access webserver by pointing our manager ip in web browser. http://10.80.253.11. same output will be get by worker node  http://10.80.253.12.



We have successfully installed docker swarm.