Kubernetes vs. Docker

Kubernetes and Docker: An Overview

Understanding Kubernetes vs. Docker is one of the most important topics in cloud native and DevOps. While Kubernetes and Docker certainly belong in a conversation together, the truth is that they shouldn’t necessarily be compared against each other. In fact, Kubernetes and Docker are not in direct competition with each other. Instead, consider them as two technologies that can complement and work with each other.

How do you know which of those circumstances you might be facing? To get there, it’s important to first understand the specific areas that Kubernetes and Docker overlap and contrast.

Understanding Docker

Docker is an open-source platform for application containers. If the concept is new to you, a container is a standalone packaging format that puts all of the necessary code and dependencies into an executable format. To use a real-world analogy, a container is like an IKEA package with all of the desk's pieces, brackets, and screws (and hex wrench, of course)—but in addition to containing all the pieces, it builds the desk for you when you execute the container.

Docker is often used by application developers because of its lightweight and standardized format. These traits enable developers to build, test, and deploy with flexibility and scalability.

Docker also has another meaning in the IT industry—an actual company exists called Docker, Inc. The company develops tools to work within the platform. This difference is important to note given the overlapping name.

Understanding Kubernetes

If Docker is a single container, Kubernetes is a tool for managing many containers at once. Like Docker (the platform, not the company), Kubernetes is an open source platform, though it is managed by the Cloud Native Computing Foundation as a project with more than 2,300 contributors. Kubernetes works like an operating system for the cloud, streamlining and simplifying management across virtual machines and clouds so that IT departments can handle things at scale.

What is Kubernetes capable of? Kubernetes works similarly to any sort of system management found on a local system, just on the scale of a container. Provisions, updates, schedules, deletions, and general health monitoring are all within the reach of Kubernetes. To go back to the IKEA analogy, if a container is a single desk, then Kubernetes is like the facilities manager who’s enabling ordering, distributing, and checking in on the status of desks, chairs, and other packaged furniture at the IKEA warehouse.

What other container runtimes exist?

One missing piece in any discussion of Docker and Kubernetes is the definition of container runtimes. What is a container runtime? In short, it is the engine that runs the container—going back to the IKEA analogy, container runtimes are the assembly instructions inside the box. In some cases, this is simple, and execution management is handled within what is known as a low-level container runtime. For more complex situations, high-level container runtimes provide direction for API integration, image formats, and image management. In some cases, the term may be used interchangeably with Docker, though there’s a little more nuance to it than that.

Kubernetes runs an API known as Container Runtime Interface (CRI). This interfaces with each container runtime to execute the package. Again, using the IKEA analogy, Kubernetes’ CRI is the person who reads the assembly instruction (container runtime) within the package (container).

Other container runtimes exist besides Docker. Two other popular ones are:

Containerd: Containerd started as part of the Docker project. However, the goal was to make Docker more flexible and modular, so the developers opted to separate Containerd into its own project. Containerd handles high-level container runtime needs, such as pulling images from registries, image management, and integrating with low-level runtimes to execute the container process.

CRI-O: CRI-O is another open-source container runtime alternative to Docker. It implements the Kubernetes Container Runtime Interface (CRI) to enable runtimes that are compatible with the Open Container Initiative standard.

Both CRI-O and Containerd use the specifications provided by CRI, making them completely compatible with Kubernetes.

What is the difference between Docker and Kubernetes?

Docker vs. Kubernetes” is often discussed, but the truth is that the two aren’t in direct competition with each other. The IKEA analogy used throughout this article shows how they are related and why they are key to executing modern IT management, but not competitors in any way. Instead, they are part of the cloud native ecosystem. Docker containers are part of what Kubernetes manage, and the benefit of Kubernetes is the ability to scale the volume of Docker containers easily.

Thus, the question is not “do I choose Docker or Kubernetes?” Instead, the main consideration for IT directors is how they will use Kubernetes and Docker together in terms of management and operations.

How Docker and Kubernetes work together

Kubernetes and Docker are built to work together. While it is not necessary to use Kubernetes to manage a Docker deployment, they are an effective tandem in situations where multiple instances of deployments must be managed. This is particularly so for situations when multiple deployments of the same application are used, as well when scaling is necessary. The open-source nature of the Kubernetes orchestration system ensures a continuously supported platform that manages complexities across multiple servers.

From Kubernetes, numerous Docker packages can be deployed and managed, through features such as batch processing of patches and updates, and at-scale monitoring of issues, all while handling on-demand requests. With Kubernetes, IT departments can:

  • Distribute Docker containers across an infrastructure
  • Scale Docker containers and related resources up or down as needed
  • Provision, schedule, or delete containers and updates as needed
  • Monitor the health of Docker instances

Oracle tools for Kubernetes and Docker

Oracle Cloud Infrastructure offers a number of services to accelerate and build modern cloud native applications. In particular, Container Engine for Kubernetes and Container Registry—which manage and analyze Docker images—are robust and free (included) tools that streamline management and increase performance. See for yourself by trying Oracle Cloud for free to access Kubernetes.

Oracle Container Engine for Kubernetes: Customer Success

Archeological Park of Pompeii
Archeological Park of Pompeii:

Following the March 2020 shutdown of the Archeological Park of Pompeii in Italy, any plans to reopen required a measure of management and control to ensure social distancing. Plans formed to allow tourists to access the a new MyPompeii app powered by a number of Oracle products selected to expedite a cloud native mobile solution, including Oracle Container Engine for Kubernetes and Oracle Container Registry.

Snap Vision:

London-based Snap Vision provides visual search technology powered by artificial intelligence to help shoppers discover the clothes they love. As COVID-19 forced in-store shopping to essentially shut down for significant stretches of time, Snap Vision's technology was offered to UK retailers to help create a digital shopping experience. Scaling was a significant challenge, though Snap Vision was able to host new retailer environments at a low cost thanks to Oracle Cloud Infrastructure with Kubernetes.