Complete Steps to deploy application using docker swarm on digitalocean
Firstly, you should have active account on digitalocean . If you’re new user then use below link to register on digitalocean
1. Create Access token on Digital Ocean
Refer below link to create Digital Ocean Access Token
https://www.digitalocean.com/docs/api/create-personal-access-token/
2.Create swarm manager
Make sure in local machine you’ve already installed docker
Run following command on your local machine to create droplet on digitalocean
$ docker-machine create — driver digitalocean — digitalocean-access-token <DIGITAL_OCEAN_ACCESS_TOKEN> docker-swarm-managerRun following create to Public IP of docker-swarm-manager
$ docker-machine ip docker-swarm-manager
Create swarm cluster on docker-swarm-manager
//ssh to digitalocean docker-swarm-manager
$ docker-machine ssh docker-swarm-manager
$ docker swarm init — advertise-addr <public IP of digitalocean droplet>After running above command in output you’ll get token like this
docker swarm join — token <SWARM MANAGER TOKEN> <public IP of digitalocean droplet>:2377
To create droplet with different configuration refer following link
3. Create multiple swarm nodes
— Create following shell script file
File: setup-swarm-node.sh
for i in `seq 1 $1`
do
docker-machine create — driver digitalocean \
— digitalocean-image ubuntu-16–04-x64 \
— digitalocean-access-token <DIGITAL_OCEAN_ACCESS_TOKEN> swarm-node-$i;
doneRun below command to setup n noof cluster
$ sh setup-swarm-node.sh 34. Join these node to swarm manager
Follow same step for all swarm nodes
— Login to swarm node
$ docker-machine ssh swarm-node-1
— Run below command to join swarm manager
$ docker swarm join — token <SWARM MANAGER TOKEN> <public IP Address of docker-swarm-manager>:23775. Check all nodes joined to swarm manager
— Login to swarm-manager-node
$ docker-machine ssh swarm-manager-node
— Type below command to see all nodes , in my case I’ve created only 2 swarm nodes
$ docker node ls
Output look like this:
root@docker-swarm-manager:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
0z0egd5d9c7mem4gqw0f1nw7s * docker-swarm-manager Ready Active Leader 18.06.1-ce
lyrdfv0vw8wtyhxcflonozza2 swarm-node-1 Ready Active 18.06.1-ce
v4bobr3t688ueaheyg6omnhxo swarm-node-2 Ready Active 18.06.1-ce
uhxc5i0ju8sc2a0a7dj9hu8hu swarm-node-3 Ready Active 18.06.1-ce6. Setup some sample apps using docker service
Login into docker-swarm-managaer
$ docker-machine ssh docker-swarm-manager
I’ll use following image which I’ve created using node(expressjs)
1. sunilmore690/express-app >> app1
2. sunilmore690/express-app-2 >> app2
Deploying this images using docker service
$ docker service create --name app1 --publish 8080:3000 --replicas=4 sunilmore690/express-app
$ docker service create --name app2 --replicas=4 8081:3000 sunilmore690/express-app-2Now hit the following URL in browser
http://<Public IP of Docker Swarm Manager>:8080 > app1
http://<Public IP of Docker Swarm Manager>:8081 > app2
To see list of docker services
$ docker service ls
7. Setup GUI to manage for docker swarm
There are better option available to manager docker
Ref: https://www.upnxtblog.com/index.php/2018/01/17/top-6-gui-tools-for-managing-docker-environments/
But Personally I like portainer
Ref: https://portainer.io/install.html
— Login to swarm manager
> docker-machine ssh docker-swarm-manager
MANAGE A SWARM CLUSTER WITH PORTAINER
$ docker volume create portainer_data
$ docker service create \
— name portainer \
— publish 9000:9000 \
— replicas=1 \
— constraint ‘node.role == manager’ \
— mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
— mount type=volume,src=portainer_data,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sockNow hit the http://<Digital Ocean PUblic IP>:9000