Docker vs Kubernetes Hero Image
December 2, 2019

Kubernetes vs Docker Swarm

Microservices
Java Application Development

When people talk about Kubernetes vs Docker, it reflects the short time frame during which Docker and Kubernetes were trying to compete for the same space in container orchestration. Docker, the most-popular container service for distributed applications (aka microservices) wanted to increase their foothold on microservices by providing proprietary container orchestration via their service, Docker Swarm.

The real comparison, and the one we'll be covering today, is Kubernetes vs Docker Swarm. But before we get to that, lets start at the beginning with a recap on containers and why we're having a debate about container orchestration technologies.

Back to top

A Brief History of Containers

Docker may be synonymous with microservices today, but that wasn’t always the case. In fact, “containers” have been around for far longer than Docker. From chroots, to BSD jails, to Solaris Containers, containers were notoriously hard to work with and infrequently adopted. 2008 marked the first conscientious attempt at bringing containers into the mainstream – the LXC project. While it did decrease the sharp edges that had previously prevented widespread adoption of containers, it still needed improvement.

Enter Docker for Microservices

Docker took the idea proposed by LXC and ran with it – finally making container pattern usage accessible to the average developer. It quickly became the de-facto container solution for developers and was consequently supported by the surrounding Java ecosystem (as evident by the 100,000+ images available on Docker Hub). Today, Docker is the most-commonly used container technology for microservices. And, despite the Docker vs Kubernetes "debate", is almost always used with Kubernetes.

Back to top

Using Docker Swarm for Container Orchestration

Docker Swarm is favored for deploying relatively simple distributed systems, and for deploying them quickly. It’s generally favored for small applications. Because Docker Swarm doesn’t have the breadth of container orchestration functionality offered by Kubernetes, and it’s limited to Docker container orchestration, it does have some obvious shortcomings for developers.

This limited functionality means Docker Swarm isn’t typically used for enterprise scale applications. In cases where it is used, it’s often described as buggy. Another potential shortcoming for Docker Swarm is long-term support. TechTarget recently reported that the writing may be on the wall for Docker Swarm, saying that Mirantis (the company who bought Docker) will only support Swarm for another two years. (UPDATE: Mirantis recently announced that they will continue supporting and adding new features for Docker Swarm with no "implied end date."

Back to top

Using Kubernetes for Container Orchestration

For Java developers, Kubernetes can offer a more robust way to code complex distributed systems. The suite of plugins, which includes everything from service discovery and load balancing to self-healing and automated rollouts, offers robust functionality to developers working in microservices or otherwise distributed systems. While Kubernetes can offer the same functionality as many ingrained monolithic services, simply applying Kubernetes isn’t a fix-all. This is especially true for developers looking at Kubernetes as an option to decrease overhead.

Kubernetes in Java Use Case

One of the biggest benefits for Kubernetes is that many of the favored, niche Java technologies offer Kubernetes-optimized versions of their software. Jenkins X, for example, is optimized specifically for implementing automated CI/CD for Kubernetes in a “batteries included” format. By pairing Kubernetes with Istio and Jenkins X, developers are able to create complex, disposable testing programs that take applications seamlessly from automated testing to canary release – for free. (Also see How to Set Up Jenkins on Top of a Kubernetes Cluster.)

Back to top

Kubernetes vs. Docker Swarm

When comparing Docker Swarm vs Kubernetes for use in Java microservices development, it’s important to consider the application. Not all applications need the complex deployment, scheduling, and scaling services (or the overhead) that Kubernetes offers.

Kubernetes vs. Docker Swarm

Kubernetes

Docker Swarm

Broad functionality, extensible

More focused functionality, less extensible

Large user base, more community support

Smaller user base, less community support

Ideal for larger, more complex container-based applications

Ideal for smaller, less complex container-based applications

Higher performance overhead

Lower performance overhead

Ongoing support, updates

Support with no "implied end date"

For developers pursuing serverless application scalability, Kubernetes replaces application server functionality out of the box, while Docker Swarm cannot. For simpler, containerized deployments – and in cases where there is already existing orchestration functionality – Docker Swarm may be the better choice.

For more complex distributed applications that require more niche functionality, and ones that aren’t using alternative container technologies like ContainerD or CRI-O, Kubernetes – and the accompanying plugin suite – offers a more robust option for microservices.

Back to top

Final Thoughts

From their origins as cumbersome and inaccessible, to ubiquitous, containers have become a pivotal piece of the Java ecosystem. And, with diverse applications using containers, container orchestration is becoming more and more requisite. Just as Docker claimed the mantle for containers, Kubernetes seems to have cemented itself as the choice for container orchestration. With Docker Swarm on tenuous footing, and Kubernetes orchestration widely adopted, it’s hard to see that changing anytime soon.

Enhance your Java development practice by eliminating redeploys with JRebel. Start your 14-day free trial today. 

Try JRebel Free

Additional Resources

Looking for ways to improve microservice application resilience? This webinar explores some of the most impactful resilience patterns you can leverage today.

You may also want to check out this webinar detailing Eight Ways to Improve Java Microservices Performance.

For those who want to learn more about containers, containerization, or technologies like Docker and Kubernetes that enable it, the resources below are worth your time.

 

Back to top