In this post, I am going to give you a tutorial to setup your own Docker Swarm for small businesses.
A Docker swarm is a cluster of Docker hosts, with one being a master and the others being workings. You can have more than one master, but this is not what we are going to be focusing on today.
First thing we need to do is setup the master node. This will be the controller of your Docker Swarm. Workers will not have the priveleges of creating services and stacks, only the Master(s) can do this.
We are also going to use the master as a central point to store persistant files, if your services require it)
Step 1 – Install Alpine Linux
First thing we need to do is setup a new Alpine Linux virtiual machine.
For more information on how to do this, please see my tutorial on Getting Started with Alpine Linux.
Step 2 – Enable the Community Repository Mirror
First of we need to open up
/etc/apk/repositories in our editor of choice. I am going to use
vim. Once open we need to comment in the line that has the version and community in it.
#/media/cdrom/apks http://ams.edge.kernel.org/alpine/v3.10/main #http://ams.edge.kernel.org/alpine/v3.10/community #http://ams.edge.kernel.org/alpine/edge/main #http://ams.edge.kernel.org/alpine/edge/community #http://ams.edge.kernel.org/alpine/edge/testing
#/media/cdrom/apks http://ams.edge.kernel.org/alpine/v3.10/main http://ams.edge.kernel.org/alpine/v3.10/community #http://ams.edge.kernel.org/alpine/edge/main #http://ams.edge.kernel.org/alpine/edge/community #http://ams.edge.kernel.org/alpine/edge/testing
Final part of this step is to run an
apk update to pull down the community repository configuration.
Step 3 – Install, Enable and Start Docker
Now we are going to install Docker. This is a simple
docker-master:~# apk add docker
Next, we need to tell Alpine to automatically start Docker on boot.
docker-master:~# rc-update add docker * service docker added to runlevel default
Finally, lets get Docker running.
docker-master:~# /etc/init.d/docker start * Caching service dependencies ... [ ok ] * Mounting cgroup filesystem ... [ ok ] * /var/log/docker.log: creating file * /var/log/docker.log: correcting owner * Starting docker ... [ ok ]
Step 4 – Initialise Swarm
Now we need to initilise the Docker Swarm. This enables us to create stacks and services as well as add worker nodes later on.
Again, like most things, it’s one command
docker-master:~# docker swarm init Swarm initialized: current node (tufha0oua5dvhjcx9cjev3z6t) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-420lg3j258pt24jd5gpl9pox9odhirk3omc91lxksvdnwuakgj-1dvx70ao059lkfse089hikepc 10.200.0.20:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Lets keep a note of the
docker swarm join command that comes back from your init. We will need this later on.
Step 5 – Install an NFS Server
Now we have Docker ready to go, we need to create somewhere for the persistant stroage to live, if it is required by one or more of your services.
First thing we will do is create a
Next, we are going to install the NFS server.
apk add nfs-utils
Again, like Docker, we need to enable and start the NFS Server.
docker-master:~# rc-update add nfs * service nfs added to runlevel default docker-master:~# /etc/init.d/nfs start * Caching service dependencies ... [ ok ] * Starting rpcbind ... [ ok ] * Starting NFS statd ... [ ok ] * Mounting nfsd filesystem in /proc ... [ ok ] * Starting NFS mountd ... [ ok ] * Starting NFS daemon ... [ ok ] * Starting NFS smnotify ... [ ok ]
Now we need to tell NFS to expose the
/data directory. Lets open up
/etc/exports in our preferred editor and add the following line.
To apply the new export, we will need to reload the NFS server.
docker-master:~# /etc/init.d/nfs reload * Reloading /etc/exports ... [ ok ]
The master is now ready to create services on. Keep reading if you keen on setting up a worker or 2.
Step 1 – Copy and Paste
Follow Steps 1 – 3 of the Master Node Tutoral.
Step 2 – Install, Enable and Start NFS Client
First this we need to do is create a
We also need to install NFS utils like we did on the manager node.
apk add nfs-utils
Now we are going to open up
/etc/fstab in our desired editor and add an entry.
10.200.0.20:/data /data nfs defaults,_netdev 0 0
Now we need to enable the
nfsmount service to make sure the NFS share is mounted on boot.
docker-worker:~# rc-update add nfsmount * service nfsmount added to runlevel default
Next, we are going to start the service.
docker-worker:~# /etc/init.d/nfsmount start * Caching service dependencies ... [ ok ] * Starting rpcbind ... [ ok ] * Starting NFS statd ... [ ok ] * Starting NFS sm-notify ... [ ok ] * Mounting NFS filesystems ... [ ok ]
Step 3 – Join Worker to the Swarm
Now for the last bit. We are going to add the worker we’ve just created to the swarm. Remember the command we were given when we initialised the swarm on the master? Now we are going to use it.
docker-worker:~# docker swarm join --token SWMTKN-1-420lg3j258pt24jd5gpl9pox9odhirk3omc91lxksvdnwuakgj-1dvx70ao059lkfse089hikepc 10.200.0.20:2377 This node joined a swarm as a worker.
That’s it. You have created a Docker Swarm.