Docker and Kubernetes
Tags: devops, dataengineering, softwareengineer, programming
Published: 2022-04-27 12:01:53

Docker is a technology for creating and running containers, while Kubernetes is a container orchestration technology. Let's explore how Docker and Kubernetes align and how they support cloud-native computing.

**Docker** 

Docker is a containerization platform that is used to create and run software containers. A container is a collection of one or more processes, organized under a single name and identifier. A container is isolated from the other processes running within a computing environment, be it a physical computer or a virtual machine. Basically, it’s a toolkit that makes it easier, safer and faster for developers to build, deploy and manage containers. 

•	**Docker Engine:** The runtime environment that allows 
developers to build and run containers.
•	**Docker File:** A simple text file that defines everything needed to build a Docker container image, such as OS network specifications and file locations. It’s essentially a list of commands that Docker Engine will run in order to assemble the image.
•	**Docker Compose:** A tool for defining and running multi-container applications. It creates a YAML file to specify which services are included in the application and can deploy and run containers with a single command via the Docker CLI.

Other Docker API features include the ability to automatically track and roll back container images, use existing containers as base images for building new containers and build containers based on application source code.

**Kubernetes**

Kubernetes is an open-source container orchestration platform for scheduling and automating the deployment, management and scaling of containerized applications. Containers operate in a multiple container architecture called a cluster. A Kubernetes cluster includes a container designated as a master node that schedules workloads for the rest of the containers or worker nodes in the cluster. The master node determines where to host applications (or Docker containers), decides how to put them together and manages their orchestration. By grouping containers that make up an application into clusters, Kubernetes facilitates service discovery and enables management of high volumes of containers throughout their lifecycles.
Key Kubernetes functions include the following:               
•	**Deployment:** Schedules and automates container deployment across multiple compute nodes, which can be VMs
•	**Service Discovery and Load Balancing:** Exposes a container on the internet and employs load balancing when traffic spikes occur to maintain stability.
•	**Auto-scaling features:** Automatically starts up new containers to handle heavy loads, whether based on CPU usage, memory thresholds or custom metrics.
•	**Self-healing capabilities:** Restarts, replaces or reschedules containers when they fail or when nodes die, and kills containers that don’t respond to user-defined health checks.
•	**Automated rollouts and rollbacks:** Roll out application changes and monitors application health for any issues, rolling back changes if something goes wrong.

Although Kubernetes and Docker are distinct technologies, they are highly complementary and make a powerful combination. Docker provides the containerization piece, enabling developers to easily package applications into small, isolated containers via the command line. Developers can then run those applications across their IT environment, without having to worry about compatibility issues. If an application runs on a single node during testing, it will run anywhere.
When demand surges, Kubernetes provides orchestration of Docker containers, scheduling and automatically deploying them across IT environments to ensure high availability. In addition to running containers, Kubernetes provides the benefits of load balancing, self-healing and automated rollouts and rollbacks. Plus, it has a graphical user interface for ease of use.