<p>I am finding docker swarm, kubernetes quite similar and then there is docker which is a company and the above two are docker clustering tool. So what exactly all these tools are and differences between them?</p>

<p>There are lots of articles out there which will explain the differences. In a nutshell:</p>

<ul>
<li>Both are trying to solve the same problem - container orchestration over a large number of hosts. Essentially these problems can be broken down like so: 

<ul>
<li>Scheduling containers across multiple hosts (taking into account resource utilization etc)</li>
<li>Grouping containers into logical units</li>
<li>Scaling of containers</li>
<li>Load balancing/access to these containers once they're deployed</li>
<li>Attaching storage to the containers, whether it be shared or not</li>
<li>Communication/networking between the containers/grouped containers</li>
<li>Service discovery of the containers (ie where is X service)</li>
</ul></li>
</ul>

<p>Both Kubernetes &amp; Docker Swarm can solve these problems for you, but they have different naming conventions and ideas on how to solve them. The differences are relatively conceptual. There are articles that break this down quite well:</p>

<p><a href="https://platform9.com/blog/compare-kubernetes-vs-docker-swarm/">https://platform9.com/blog/compare-kubernetes-vs-docker-swarm/</a>
<a href="https://torusware.com/blog/2016/09/hands-on-orchestration-docker-1-12-swarm-vs-kubernetes/">https://torusware.com/blog/2016/09/hands-on-orchestration-docker-1-12-swarm-vs-kubernetes/</a>
<a href="http://containerjournal.com/2016/04/07/kubernetes-vs-swarm-container-orchestrator-best/">http://containerjournal.com/2016/04/07/kubernetes-vs-swarm-container-orchestrator-best/</a></p>

<p>Essentially, they are similar products in the same space. There are a few caveats to bear in mind though:</p>

<ul>
<li>Kubernetes is developed with a container agnostic mindset (at present it supports Docker, <a href="https://coreos.com/rkt/">rkt</a> and has some support for <a href="https://www.hyper.sh/">hyper</a> whereas docker swarm is docker only)</li>
<li>Kubernetes is "cloud native" in that it can run equally well across <a href="http://kubernetes.io/docs/getting-started-guides/coreos/azure/">Azure</a>, <a href="https://cloud.google.com/container-engine/">Google Container Engine</a> and <a href="http://kubernetes.io/docs/getting-started-guides/aws/">AWS</a> - I am not currently aware of this being a feature of Docker Swarm, although you could configure it yourself</li>
<li>Kubernetes is an entirely open source product. If you require commercial support, you need to go to a third party to get it. Docker provides enterprise support for Swarm</li>
<li>If you are familiar with the docker-compose workflow, Docker Swarm makes use of this so it may be familiar to you and easier to get started. Kubernetes requires learning pod/service/deployment definitions which while pure yaml, are an adjustment.</li>
</ul>
